UVA 572

来源:互联网 发布:cmd修复网络连接 编辑:程序博客网 时间:2024/06/05 01:09

递归,进行图的深度遍历,在遍历的过程中,记得做出相应的统计和标记即可,具体实现见代码

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>using namespace std;int m, n;char area[100][100];int num[100][100];void dfs(int i,int j,int id){if (i < 0 || i >= m || j < 0 || j >= n) return;if (area[i][j] != '@' || num[i][j] != -1) return;num[i][j] = id;dfs(i,j+1,id);dfs(i,j-1,id);dfs(i+1,j,id);dfs(i-1,j,id);dfs(i-1,j+1,id);dfs(i-1,j-1,id);dfs(i+1,j+1,id);dfs(i+1,j-1,id);}int main(){while (cin >> m >> n){memset(num,-1,sizeof(num));if (m == 0) break;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++) cin >> area[i][j];}int id = 0;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (num[i][j] == -1 && area[i][j] == '@'){id++;dfs(i, j, id);}}}cout << id << endl;}//system("pause");return 0;}

原创粉丝点击