和样例只差一点
查看原帖
和样例只差一点
444267
cui_can楼主2021/7/17 15:45

DFS做的 与样例只有最后一行不同

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int mp[35][35];
int visit[35][35];
int dx[]={-1,0,0,1};
int dy[]={0,-1,1,0};
void dfs(int x,int y){
	for(int k=0;k<4;k++){
		int nx=x+dx[k],ny=y+dy[k];
		if(nx<1||nx>n||ny<1||ny>n||mp[nx][ny]||visit[nx][ny])continue;
		mp[nx][ny]=2;visit[nx][ny]=1;
		dfs(nx,ny);
	}
	return;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%d",&mp[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			if(mp[i][j]){
			mp[i+1][j+1]=2;visit[i+1][j+1]=1;
			dfs(i+1,j+1);				
			}
		}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			printf("%d ",mp[i][j]);
		printf("\n");
	}
	return 0;
}
2021/7/17 15:45
加载中...