看到题目规模是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;
}

最新文章

  1. C#读取Excel文件:通过OleDb连接,把excel文件作为数据源来读取
  2. android中的命令安装与卸载
  3. 一个简单的Dump转文本工具—Dump2Text
  4. 第21条:理解Objective-C错误模型
  5. 请问如何查询一个APP的Android和iOS下载量?
  6. 面向对象的特性-利用prototype为类创建静态成员
  7. Python系列 - 进程和线程
  8. .NET Core Community 首个千星项目诞生:CAP
  9. UNIX环境高级编程——守护进程
  10. WPF 添加 Resources Dictionary 资源 一般类库项目中无法添加资源文件(ResourceDictionary)
  11. flutter Row 垂直或水平放置多个widget
  12. JAVA初识,JAVA是什么?
  13. Yii2的save()方法容易出错的地方
  14. Struts2复习
  15. python自动发送测试报告(五)
  16. 高通 sensor 从native到HAL
  17. C#实现虚拟控件列表显示100w个控件方法
  18. Django之路由分配系统
  19. javascript 如何打印、输出数组内容(将数组内容以字符串的形式展示出来)
  20. KMP算法用JavaScript实现

热门文章

  1. c#冒泡法排序
  2. python exception的传递
  3. What the 80/20 Rule Tells Us about Reducing HTTP Requests
  4. Node 文件上传,ZIP
  5. 【智能无线小车系列八】在树莓派上使用USB网卡
  6. java HttpClient GET请求
  7. Linux系统中10个常用的ps命令总结
  8. 51Nod - 1304 :字符串的相似度 (裸的扩展KMP)
  9. linux 中的局部变量、全局变量、shell 变量的总结
  10. cf 424