思路来自 大佬 hat.openai.com/c/9c30032e-5fb9-4677-8c15-9ea6530dc6db
题目链接 P1162 填涂颜色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路 搜索
首先 在外面围上一圈0开始搜素
因为题目说将封闭区域内的0变成2 我们可以在外面进行搜索
把外面所有可以搜索走过的区域变成2 这样1围成的封闭区域里的是0;
1作为“围墙”

输出的时候 输出2-a[i][j]
可以走到的地方就变成0
围墙2-1=1 保持不变
封闭区域内的0我们没访问到 未标记 所以2-0=2
于是 实现了将所有封闭区域的0变成2
代码
#include<iostream>
 #include<queue>
 using namespace std;
 int n;
 int a[35][35];
 queue <pair <int,int> > que;//定义一个可以储存数对的队列 
 void search(int x,int y){
     int dx[5]={0,0,1,0,-1};//设置偏移量  
     int dy[5]={0,1,0,-1,0};//基本操作 不会可以去搜 
     que.push(pair<int,int> (x,y));//合法点入队 
     while(!que.empty() ){
         pair<int,int> t=que.front();//取出 
         que.pop() ;
         a[t.first ][t.second ]=2;//标记可以搜到 
         for(int i=1;i<=4;i++){
             if(t.first +dx[i]>=0&&t.first +dx[i] <= n+1)
             if(t.second+dy[i]>=0&&t.second+dy[i] <= n+1)//判断是否越界 
             if(a[t.first +dx[i]][t.second +dy[i]]==0){//如果可以到达该点 
                 que.push(pair<int,int>(t.first +dx[i],t.second +dy[i]));//存入 
             }
         } 
     } 
 } 
 int main(){
     cin>>n;
     for(int i=1;i<=n;i++){
         for(int j=1;j<=n;j++){
             cin>>a[i][j];
         }
     }
     search(0,0);
     for(int i=1;i<=n;i++){
         for(int j=1;j<=n;j++){
             cout<<2-a[i][j]<<' ';
         }
         cout<<endl;
     }
     
     
     
     
     
     return 0;
 }