5 和3 WA
查看原帖
5 和3 WA
666682
songsonghui楼主2022/3/3 17:42
#include <iostream>
#include <cstring>
int n;
int map[35][35];
int mark[35][35];
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};

void dfs(int x,int y){
	if(map[x][y]==1||x<0||x>n+1||y<0||y>n+1||mark[x][y]==1) return;
	mark[x][y] = 1;//标记已经走过 
	for(int i =0;i<4;i++){//4个方向移动 
		if(y+dy[i]>n) dfs(x+1,1);//到了右边缘 
		else dfs(x+dx[i],y+dy[i]);
	}
}
int main(int argc, char** argv) {
	memset(mark,0,sizeof(mark));
	memset(map,0,sizeof(map));
	scanf("%d",&n);
	for(int i= 1;i<=n;i++){//输入 
		for(int j=1;j<=n;j++)
		scanf("%d",&map[i][j]);
	}
	dfs(0,0);
	
	for(int i =1;i<=n;i++){
		for(int j =1;j<=n;j++){
			if(mark[i][j]==0&&map[i][j]==0) map[i][j] = 2;
			//mark里标记为0则为内圈,内圈中为0的改为2
		}
	}
	for(int i =1;i<=n;i++){//输出 
		for(int j =1;j<=n;j++) printf("%d ",map[i][j]);
		printf("\n");
	}
	return 0;
}
2022/3/3 17:42
加载中...