1 条题解

  • 0
    @ 2022-8-13 12:06:02

    大体思路如下:

    找到外围0标记成2,全部标记后,剩下的0就是由数字1构成的闭合圈


    代码如下(c++)

    #include<bits/stdc++.h>
    using namespace std;
    int dx[]={-1,1,0,0};
    int dy[]={0,0,-1,1};
    int n,a[35][35];
    void dfs(int x,int y){
    	if(x<0||x>n+1||y<0||y>n+1||a[x][y]!=0) return;//越界或者已经走过则返回
    	a[x][y]=2;// 标记
    	for(int i=0;i<4;i++) dfs(x+dx[i],y+dy[i]);//向四个方向继续前进
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++) cin>>a[i][j];
    	}//输入
    	dfs(0,0);
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++) cout<<abs(a[i][j]-2)<<" ";//看到其他dalao用两个数组觉得太麻烦(懒),所以想到了用一个数组输出的技巧
    		cout<<endl;//输出
    	}
    }
    
    • 1

    信息

    ID
    163
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    24
    已通过
    16
    上传者