#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搜索啊搜索,又改了好久,原因是:首先是第一个忘记标记啦,后来又发现队列开小啦,各种错啊!!
最新推荐文章于 2025-05-05 19:00:04 发布
本文介绍了一种用于探测地下油藏分布的算法。该算法通过分析网格中各单元格的状态来确定油藏的数量及其连通性。网格由星号(*)表示空地、@表示油藏单元。算法使用广度优先搜索(BFS)来遍历每个可能的油藏区域,并标记已访问过的油藏单元,最终统计出独立油藏的数量。

3061

被折叠的 条评论
为什么被折叠?



