#include <stdio.h> #include <stdlib.h> #include <string.h> char map[105][105]; int vis[105][105]; int mv[8][2]= {{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}}; int s; int m,n; struct A { int x; int y; } p[10050]; int enter=0,out=0; struct A f,t; int getdian() { int i,j; for(i=0; i<m; i++) { for(j=0; j<n; j++) { if(map[i][j]=='@'&&!vis[i][j]) break; } if(j<n) break; } if(i>=m&&j>=n) return s; else { s++; vis[i][j]=1; BFS(i,j); } } void BFS(int x,int y) { int i; f.x=x; f.y=y; p[enter++]=f; while(out<enter) { t=p[out++]; for(i=0; i<8; i++) { f.x=t.x+mv[i][0]; f.y=t.y+mv[i][1]; if(0<=f.x&&f.x<m&&0<=f.y&&f.y<n&&!vis[f.x][f.y]&&map[f.x][f.y]=='@') { vis[f.x][f.y]=1; p[enter++]=f; } } } if(out>=enter) getdian(); } int main() { int i; int t; while(~scanf("%d%d",&m,&n)&&m&&n) { memset(vis,0,sizeof(vis)); s=0; for(i=0; i<m; i++) scanf("%*c%s",map[i]); printf("%d\n",getdian()); } return 0; }
VJ--图论---BFS搜索啊搜索,又改了好久,原因是:首先是第一个忘记标记啦,后来又发现队列开小啦,各种错啊!!
最新推荐文章于 2024-08-14 22:15:45 发布