题解 P1162 填涂颜色

Posted baiwhiter-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 P1162 填涂颜色相关的知识,希望对你有一定的参考价值。

看到题目规模是n(1≤n≤30)即最大规模为30*30

本蒟蒻有个奇妙的想法!!

核心思路:搜索地图内除开被1包围着的0,并标注为1(即不填色)

!!!那么,我们可以从每一个边界点开始去搜索

话不多说,直接上代码

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int map[35][35];
int vis[35][35];
int mov1[]=1,0,0,-1;
int mov2[]=0,1,-1,0;
void dfs(int x,int y)
     if(x<=0 || y<=0 || map[x][y]==1 || x>n || y>n || vis[x][y]==1) return;//搜索边界
     vis[x][y]=1;//只要不是被1包围着的0,都标注为不需要染色(标注为1)
     for(int i=0;i<4;i++)
        dfs(x+mov1[i],y+mov2[i]);
     

void print()
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(vis[i][j]==0)//只要是没有标注过的,那么都是需要染色的
                cout<<"2"<<" ";
                continue;//输出了就跳过
            
            cout<<map[i][j]<<" ";
        
        cout<<endl;//记得换行
    

int main()
    cin>>n;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>map[i][j];
            if(map[i][j]==1) vis[i][j]=1;//地图上是1,那么vis上也是1,不需被染色(边界)
        
    
    /*边界都走一遍*/ 
    
    for(int i=1;i<=n;i++)
        dfs(1,i);
    
    
    for(int j=1;j<=n;j++)
        dfs(j,1);
    
    
    for(int i=1;i<=n;i++)
        dfs(i,n);
    
    
    for(int j=1;j<=n;j++)
        dfs(n,j);
     
    
    print();//输出
    
    return 0;

以上是关于题解 P1162 填涂颜色的主要内容,如果未能解决你的问题,请参考以下文章

P1162 填涂颜色

luogu P1162 填涂颜色

Luogu P1162 填涂颜色(bfs)

P1162 填涂颜色 洛谷

填涂颜色

洛谷P1162(自我感觉思路还算巧妙的一道题)