help!
查看原帖
help!
561143
hjh20202024hjh楼主2022/1/19 20:41
#include <stdio.h>
int num=0,m,n;
char s[1005][1005];
int visit[1005][1005]={0};
void dfs(int x, int y){   //计算相邻一片#的数量 
    if(s[x][y]=='.'||visit[x][y]==1) return;
	visit[x][y]=1;
	num++;
	if(x>1)dfs(x-1,y);
	if(x<m)dfs(x+1,y);
	if(y>1)dfs(x,y-1);
	if(y<n)dfs(x,y+1);
	return;
}
int main(){
	int ans=0,a,b,leng,deep; //变量意义在下文描述 
	scanf("%d%d",&m,&n);
	for(int i=1;i<=m;i++){
		scanf("\n");
		for(int j=1;j<=n;j++){
			scanf("%c",&s[i][j]);
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(s[i][j]=='#'&&visit[i][j]==0) {
				a=i+1;leng=1;
				while(s[a][j]!='.'){ //计算宽度leng 
					leng++;a++;
				}
				b=j+1;deep=1;
				while(s[i][b]!='.'){ //计算长度deep 
					deep++;b++;
				}
				num=0;   //初始化#的数量,num代表一艘船#的数量 
				dfs(i,j);      //计算相邻一片#的数量 
				if(leng*deep==num){  //长乘宽==面积,成为合法的船只,ans++
					ans++;
				}
				else {
					printf("Bad placement."); //船只不合法 
					goto B;
				}
			}
		}
	}
	printf("%d",ans);
	B:return 0;
}
2022/1/19 20:41
加载中...