跑一遍染色法,最后判断哪些位置没被染色即可

一些技巧:

为了判断方便,把字符转换成 int 型的数字。

注意边界问题

详细解释见代码

#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int a[501][501];
int x,y,ans,dx[5]={0,1,-1,0,0},dy[5]={0,0,0,1,-1}; //dx,dy数组用于遍历上、下、左、右四个位置
//下标为0的地方用0填充即可 void dfs(int n,int m)
{
if(n<0||m<0||n>x+1||m>y+1||a[n][m]) return ;
//边界,如果到建设图外面或者这里有障碍就返回,没法子让洪水灌进来
a[n][m]=1; //染色
for(int i=1;i<=4;i++)
dfs(n+dx[i],m+dy[i]);
} int main()
{
cin>>x>>y;
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++)
{
char ch;
cin>>ch;
if(ch=='0') a[i][j]=0;
else a[i][j]=1;
//字符 -> 数字
}
dfs(0,0); //染色,可以形象的理解为让洪水全部灌进来 for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++)
if(!a[i][j]) //如果这个点没有被水淹
++ans; cout<<ans<<endl;
return 0;
}

最新文章

  1. linux 之静默安装oracle
  2. NOI 题库 6264
  3. Com
  4. 【转】UTF-8汉字正则表达式
  5. HDU 4793 Collision (解二元一次方程) -2013 ICPC长沙赛区现场赛
  6. WPF ,listbox,平滑滚动的2种方式。
  7. JS类的封装及实现代码
  8. libevent源码分析(一)
  9. 基于redis分布式缓存实现
  10. selenium python (二) 元素定位方法
  11. 理解Java中的前期绑定和后期绑定
  12. 【Android】Fragment如何获取子Fragment
  13. Oracle Developer Data Modeler项目实践 (转)
  14. java学习之路--I/O流
  15. DeepCTR专题:DeepFM论文学习和实现及感悟
  16. 廖雪峰Java7处理日期和时间-3java.time的API-1LocalDateTime
  17. python用%来处理字符串
  18. 1.linux6 x86-64 RPM包安装mysql5.7.20
  19. How to create .gitignore file in Windows Explorer
  20. information_schema系列十

热门文章

  1. 软链接和硬链接——Linux中的文件共享
  2. Mac-App Store 购买过程中出错 请求超时
  3. Centos7 防火墙开放端口,查看状态,查看开放端口
  4. Mac 下如何判断 WIFI 的极限传输速度还有信号强度?
  5. centos tomcat解压版安装
  6. PHP0015:PHP分页案例
  7. CSP-J2019被虐记
  8. AT1219 歴史の研究[回滚莫队学习笔记]
  9. CF1230E Kamil and Making a Stream
  10. 吴裕雄--天生自然 R语言开发学习:R语言的安装与配置