题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13137 Accepted Submission(s):
7611
1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <cstring> 5 6 using namespace std; 7 8 int dir[8][2]= {0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1}; 9 char map[110][110]; 10 int a,b,vis[110][110],k; 11 12 struct node 13 { 14 int x,y; 15 int t; 16 } s,ss; 17 18 queue<node>q,qq; 19 int bfs() 20 { 21 while (!q.empty()) 22 { 23 s=q.front(); 24 q.pop(); 25 //vis[s.x][s.y]=1; 26 for (int i=0; i<8; i++) 27 { 28 int x=s.x+dir[i][0]; 29 int y=s.y+dir[i][1]; 30 //int t=s.t+1; 31 if (x>=0&&x<a&&y>=0&&y<b) 32 { 33 if (!vis[x][y]&&map[x][y]==‘@‘) 34 { 35 ss.x=x; 36 ss.y=y; 37 map[ss.x][ss.y]=‘*‘; 38 //vis[x][y]=1; 39 q.push(ss); 40 } 41 42 } 43 } 44 } 45 } 46 47 int main () 48 { 49 while (scanf("%d%d",&a,&b)!=EOF) 50 { 51 memset(vis,0,sizeof(vis)); 52 if (a==0&&b==0) 53 break; 54 for (int i=0; i<a; i++) 55 { 56 getchar(); 57 for (int j=0; j<b; j++) 58 { 59 scanf("%c",&map[i][j]); 60 } 61 } 62 //int k=0; 63 for (int i=k=0; i<a; i++) 64 { 65 for (int j=0; j<b; j++) 66 { 67 if (map[i][j]==‘@‘) 68 { 69 k++; 70 s.x=i; 71 s.y=j; 72 map[s.x][s.y]=‘*‘; 73 vis[s.x][s.y]=1; 74 q.push(s); 75 bfs(); 76 } 77 } 78 } 79 printf ("%d\n",k); 80 } 81 return 0; 82 }
原文:http://www.cnblogs.com/qq-star/p/4139845.html