标签:dfs
背景:dfs递归实现。
思路:对于每一个@都把和组成一个片区相连的所有@变成*,并计数一次。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; char map[105][105]; int direction[8][2]={1,0,1,1,1,-1,0,1,0,-1,-1,0,-1,1,-1,-1}; void dfs(int i,int j){ map[i][j]='*'; for(int row=0;row < 8;row++){ if(map[i+direction[row][0]][j+direction[row][1]] == '@'){ dfs(i+direction[row][0],j+direction[row][1]); } } } int main(void){ int m,n,ans=0; while(scanf("%d %d",&m,&n) && m){ memset(map,'*',sizeof(map)); getchar(); for(int i=1;i <= m;i++){ for (int j=1;j <= n;j++) scanf("%c",&map[i][j]); getchar(); } #ifdef LOCAL for(int i=1; i <= m;i++){ for(int j=1;j <= n;j++) printf("%c",map[i][j]); printf("\n"); } #endif // LOCAL for(int i=1;i <= m;i++){ for(int j=1; j <= n;j++){ if(map[i][j] == '@'){ ans++; dfs(i,j); } } } printf("%d\n",ans); ans=0; } return 0; }
标签:dfs
原文地址:http://blog.csdn.net/jibancanyang/article/details/43965865