30pts求助!
查看原帖
30pts求助!
1237578
Wade_W楼主2024/7/29 17:10
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};
int g[maxn][maxn],vis[maxn][maxn],n,m,cnt;
void dfs(int x,int y){
	g[x][y]=0;
	for(int i=0;i<4;i++){
		int xx=x+dx[i],yy=y+dy[i];
		if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&g[xx][yy]!=0&&!vis[xx][yy]){
			vis[xx][yy]=1;
			dfs(xx,yy);
			vis[xx][yy]=0;
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	char ch;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			scanf("%c",&ch);
			if(ch!='\n');
			g[i][j]=(ch=='0'?0:1);
		}
	int cnt=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(g[i][j]&&!vis[i][j]){
				vis[i][j]=1;
				dfs(i,j);
				cnt++;
			}
	printf("%d",cnt);
	return 0;
}

数据情况:#2、#5、#9AC,别的全WA

算法:一眼就能看出来是dfs

2024/7/29 17:10
加载中...