欢迎光临散文网 会员登陆 & 注册

P1162 填涂颜色

2023-03-11 15:53 作者:仓鼠翞  | 我要投稿

//https://www.luogu.com.cn/problem/P1162?contestId=96615
//DFS搜外圈的0
//注意要行和列要多增加一个维度取剔除一种情况就是边界就是n维,这样可以保证外圈的0总是连续的
//MLE
#include<bits/stdc++.h>
using namespace std;

int n;
int arr[50][50];
int visit[50][50];

void dfs(int x,int y)
{
   //一般矩阵走路问题都需借助坐标
   //一定是对原图的操作!!!每次操作都在visit的遍历上,因为递归里是修改visit[x][y]的值
   if(x<0 || y<0 || x>n+1 || y>n+1 || visit[x][y]!=0)
   {
       return;
   }
   visit[x][y]=3;
   dfs(x-1,y);//向上深搜
   dfs(x+1,y);//向下深搜
   dfs(x,y-1);//向左深搜
   dfs(x,y+1);//向右深搜
}

int main()
{
   scanf("%d",&n);
   for(int i=1;i<=n;i++)
       for(int j=1;j<=n;j++)
       {
           scanf("%d",&arr[i][j]);
           visit[i][j]=arr[i][j];
       }

   dfs(0,0);//必须从0.0开始深搜保证外层的零是连续的

   for(int i=1;i<=n;i++)
   {
       for (int j=1; j<=n;j++)
       {
           if (visit[i][j] == 3)
               printf("0 ");
           if (visit[i][j] == 1)
               printf("1 ");
           if (visit[i][j] == 0)
               printf("2 ");
       }
       printf("\n");
   }
   return 0;
}

P1162 填涂颜色的评论 (共 条)

分享到微博请遵守国家法律