UVa 572 Oil Desposits (dfs 图 染色 八连通种子填充)

来源:互联网 发布:浙江卫视直播软件 编辑:程序博客网 时间:2024/05/30 23:09
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<cstdlib>#include<algorithm>#define N 105 using namespace std;int m,n;char map[N][N];int ans;int visited[N][N];void dfs(int i,int j){if(i < 0 || i >= m || j < 0 || j >= n || visited[i][j] || map[i][j] == '*')//终止条件:①走到边界了②已经走过了③不是符号@    return ;    visited[i][j] = 1;    dfs(i+1,j);//在每一个点处都有八个方向可以走  其中八个方向可以通过一个二重循环来代替(见《算法入门经典》P163)     dfs(i-1,j);    dfs(i,j-1);    dfs(i,j+1);    dfs(i+1,j+1);    dfs(i-1,j-1);    dfs(i-1,j+1);    dfs(i+1,j-1);}int main(){//freopen("E:\\in.txt","r",stdin);//freopen("E:\\out.txt","w",stdout);while(cin>>m>>n){  if(!m)  break;  memset(map,0,sizeof(map));  memset(visited,0,sizeof(visited));  ans=0;  for(int i = 0; i < m; ++i)    for(int j = 0; j < n; ++j)         cin>>map[i][j];      for(int i = 0; i < m; ++i)         for(int j = 0; j < n; ++j)             if(!visited[i][j] && map[i][j] == '@') {    ans++;   dfs(i,j); }    cout<<ans<<endl;}return 0;} 

原创粉丝点击