没UVA帐号,UVA572,求帮忙交下。谢谢谢谢……
查看原帖
没UVA帐号,UVA572,求帮忙交下。谢谢谢谢……
809708
whssy楼主2022/12/24 20:11
#include<cstdio>
#include<iostream>
using namespace std;
char c;
int n,m,q[10000002][2];
int xy[8][2]={{0,1},{0,-1},{-1,1},{-1,0},{-1,-1},{1,1},{1,0},{1,-1}};
bool vis[31625][31625];
void bfs(int x,int y){
	vis[x][y]=0;
	int head=1,tail=1;
	q[head][0]=x;q[head][1]=y;
	do{
		for(int i=0;i<=7;i++){
			int x1=q[head][0]+xy[i][0],y1=q[head][1]+xy[i][1];
			if(x1>=1&&x1<=n&&y1>=1&&y1<=m&&vis[x1][y1]){
				q[++tail][0]=x1;q[tail][1]=y1;
				vis[x1][y1]=0;
			}
		}
		head++;
	}while(head<=tail);
}
int main(){
	while(scanf("%d%d",&n,&m),n&&m){
		int ans=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>c;
				if(c=='@')vis[i][j]=1;
				if(c=='*')vis[i][j]=0;
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(vis[i][j]){
					bfs(i,j);ans++;
				}
			}
		}
		printf("%d\n",ans);
	}
}
2022/12/24 20:11
加载中...