Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 31745 Accepted Submission(s): 18440
题意 求连通块 八个方向
最基础 dfs
AC代码
#include<iostream> #include<stdio.h> #include<string.h> #include<cmath> #include<algorithm> #define maxn 105 using namespace std; int fangxiang[8][2]={{0,1},{0,-1},{-1,0},{1,0},{-1,-1},{1,1},{1,-1},{-1,1}}; //八个方向 char visit[maxn][maxn]; char mapn[maxn][maxn]; int n,m; void dfs(int x,int y) { if(x>=1&&x<=n&&y>=1&&y<=m) //注意边界 { if(mapn[x][y]==‘@‘) //覆盖掉已经遍历到的点 { mapn[x][y]=‘*‘; for(int i=0; i<8; i++) { dfs(x+fangxiang[i][0],y+fangxiang[i][1]); } } } else return; } int main() { int i,j,k; while(scanf("%d%d",&n,&m)&&n) { int sum=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) cin>>mapn[i][j]; } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(mapn[i][j]==‘@‘) { dfs(i,j); sum++; } } } printf("%d\n",sum); } }
原文:http://www.cnblogs.com/stranger-/p/7192366.html