博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2386(简单dfs)
阅读量:7037 次
发布时间:2019-06-28

本文共 1547 字,大约阅读时间需要 5 分钟。

就是求图中有多少个水洼。对图进行dfs遍历,并把是水洼的地方全部标记。然后从下一个是水哇的地方再进行dfs。

 

1 #include 
2 #include
3 #include
4 using namespace std; 5 int graph[105][105]; 6 int sum; 7 bool vis[105][105]; 8 int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1}; 9 int dy[] = {-1, 0, 1, -1, 1, -1, 0 ,1};10 int row, col;11 12 bool check(int x, int y)13 {14 if( x >= 0 && x < row && y >= 0 && y < col)15 return true;16 return false;17 }18 19 void dfs(int x, int y)20 {21 int ix, iy;22 for(int i = 0; i < 8; i++)23 {24 ix = x + dx[i];25 iy = y + dy[i];26 if(!vis[ix][iy] && check(ix, iy) && graph[ix][iy] == 1)27 {28 vis[ix][iy] = true;29 dfs(ix, iy);30 }31 }32 }33 int main()34 {35 //freopen("in.txt", "r", stdin);36 cin >> row >> col;37 getchar();38 memset(vis, false, sizeof(vis));39 40 char c;41 for(int i = 0; i < row; i ++)42 {43 for(int j = 0; j < col; j++)44 {45 c = getchar();46 graph[i][j] = (c == '.') ? 0 : 1;47 }48 getchar();49 }50 sum = 0;51 52 for(int i = 0; i < row; i ++)53 {54 for(int j = 0; j < col; j++)55 {56 if(graph[i][j] == 1 && vis[i][j] == false)57 {58 sum++;59 vis[i][j] = true;60 dfs(i, j);61 }62 }63 }64 65 cout << sum << endl;66 return 0;67 }

 

转载于:https://www.cnblogs.com/ya-cpp/p/4148053.html

你可能感兴趣的文章
Yii框架数据库多数据库、主从、读写分离
查看>>
升级到 OS X Yonsemite 10.10后 Verions 崩溃
查看>>
Oracle共享池
查看>>
oracle JOB常见的执行时间
查看>>
自动补0
查看>>
Python如何批量给云主机配置安全组?
查看>>
iOS音频播放 (四):AudioFile
查看>>
Oracle 存储过程异常处理
查看>>
URL里面存在下划线导致SESSION在IE下被分隔
查看>>
自定义注册的 Windows服务 无法访问网络共享文件解决办法
查看>>
postgersql日志备份和还原
查看>>
简单的pythonweb程序
查看>>
RemoteView概述
查看>>
JAVA集合小结
查看>>
ubuntu下android 源码下载
查看>>
Oracle数据库角色管理
查看>>
订单系统 高级设计
查看>>
flutter 底部输入框 聊天输入框 Flexible
查看>>
mac安装thrift 0.93
查看>>
cxf客户端代码自动生成
查看>>