原题:Gym-100971A

题意:

n*m图,‘.’代表陆地,‘#’代表海,‘?’未知,问你是否有确定的一片大陆(没有其他点)

解析:

开始的时候没看到条件(一定有一个‘.’)多写了一大堆判断条件

既然一定有一个点,那么我们就先找到这个点,把?看成陆地走一遍,然后,这遍假设没走到一个‘.’,那么就是不可能了,对于‘?’,如果没走过的就是#了,走过的判一下去掉这个点后是不是对陆地有影响,没影响的话说明是边上的两个都可以是的点,在没有不可能的情况下就是Ambiguous了。

代码:


string M[51];
int n,m;
struct node{int x,y;node(){}node(int x,int y):x(x),y(y){}
};
int d[4][2]={{1,0},{0,-1},{0,1},{-1,0}};
int vis[51][51],vis2[51][51];int bfs1(node p){int sum=1;queue<node>q;vis[p.x][p.y]=1;q.push(p);while(!q.empty()){node t=q.front();q.pop();for(int i=0;i<4;i++){int x=t.x+d[i][0],y=t.y+d[i][1];if(x<0||x>=n||y<0||y>=m||vis[x][y]||M[x][y]=='#')continue;vis[x][y]=1;q.push(node(x,y));sum++;}}return sum;
}int bfs2(node p){int sum=1;queue<node>q;vis2[p.x][p.y]=1;q.push(p);while(!q.empty()){node t=q.front();q.pop();for(int i=0;i<4;i++){int x=t.x+d[i][0],y=t.y+d[i][1];if(x<0||x>=n||y<0||y>=m||vis2[x][y]||M[x][y]=='#')continue;vis2[x][y]=1;q.push(node(x,y));sum++;}}return sum;
}main(){n,m;scanf("%d%d",&n,&m);for(int i=0;i<n;i++)cin>>M[i];node st;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(M[i][j]=='.'){st.x=i,st.y=j;break;}}}int am=0;mmm(vis,0);int sum =bfs1(st);for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(M[i][j]=='#')continue;if(M[i][j]=='.'&&vis[i][j]==0)return 0*printf("Impossible\n");if(M[i][j]=='?'){if(vis[i][j]==0){M[i][j]='#';continue;}if(am)continue;M[i][j]='#';mmm(vis2,0);if(bfs2(st)==sum-1)am=1;else M[i][j]='.';}}}if(am)printf("Ambiguous\n");else{for(int i=0;i<n;i++)cout<<M[i]<<endl;}
}

Treasure Island(简单图论题)相关推荐

  1. Treasure Island CodeForces - 1214D(dfs)

    All of us love treasures, right? That's why young Vasya is heading for a Treasure Island. Treasure I ...

  2. D. Treasure Island

    D. Treasure Island dfs大法好== 写半天bfs疯狂MLE dfs标记掉路上的一些点 然后再跑一遍dfs #include<bits/stdc++.h> using n ...

  3. Gym 100971A Treasure Island

    题目链接 题目字面意思是让?变成 . 或#,使得 . 可以连成一片,唯一就把图输出,不唯一就输出Ambiguous,否则Impossible. 先将所有的 . dfs遍历一遍,记录有几块相连的陆地数k ...

  4. CF1214D Treasure Island

    考虑一种新手都打得出的方法:bfs. 首先从终点反向bfs,搜出所有能到达终点的点.然后我们从起点开始bfs,把那些能到终点的没访问过的点入队,找到终点直接结束,而答案就是任意时刻队列里点的数量的最小 ...

  5. jasperreports_JasperReports JSF插件用例–简单列表报告

    jasperreports 这是JasperReports JSF插件系列的第一篇"用例文章" ,我将专注于一个简单的需求,并且我将进一步深入. 起点是我们已经为图书商店完成的项目 ...

  6. Spring Data Solr入门

    Spring Data Solr是Spring Data项目的扩展,该项目旨在简化Apache Solr在Spring应用程序中的使用. 请注意,这不是Spring(数据)或Solr的简介. 我认为您 ...

  7. JasperReports JSF插件用例–简单列表报告

    这是JasperReports JSF插件系列的第一篇"用例文章" ,我将专注于一个简单的需求,并且我将进一步深入. 起点是我们已经为图书商店完成的项目设置,我将向其中添加一个列表 ...

  8. 前端绘制绘制图表_绘制我的文学风景

    前端绘制绘制图表 Back when I was a kid, I used to read A LOT of books. Then, over the last couple of years, ...

  9. ios备份应用数据_如何在iOS设备之间备份和复制数据

    ios备份应用数据 Although iTunes usually does a good enough job backing up your data, the backups are encry ...

最新文章

  1. 中国发布自主开发的域名系统基础软件 “红枫”
  2. 多线程:synchronize、volatile、Lock 的区别与用法
  3. 年末最大AI盛典!2020深度学习开发者峰会报名启动
  4. 10树莓派Samba的安装与配置
  5. 3.15 排列对称串
  6. XP计算机里改单核,XP中多核处理器只显示单核
  7. python颜色代码表_[matplotlib] 颜色设置及Matplotlib颜色对照表
  8. HCIA RS题库及解析(2018版)
  9. Wireshark实验 - DNS
  10. openGL实现太阳系行星系统
  11. 【学术相关】过来人对研究生阶段的学习建议
  12. word分栏排版时 插入全页宽的表格
  13. 若初见,若寻常,若是一双人
  14. 小米嵌入式研发工程师校招面试总结
  15. python中set option_python的set_option选择
  16. vue中使用echarts实现动态数据绑定、获取后端接口数据
  17. oracle 不使用结果缓存,为什么Oracle 12.1.0.2会跳过结果缓存表上的函数调用?
  18. Redis集群方案及实现
  19. 成为DevOps/SRE工程师有多难?看看这份必备技能清单
  20. 22产品经理需要具备的推广能力

热门文章

  1. cmd 文本文件分割,如何在Windows中分割大文本文件?
  2. 浅谈征信大数据与撸贷
  3. 学习黑盒优化算法CMA和RandomSearch,借助阿里达摩院MindOpt的RABBO榜单【系列2/4】
  4. poi jar包报错:java.lang.NoSuchFieldError:Factory
  5. 提示错误信息:ZeroDivisionError: division by zero的解决方法
  6. 微信小程序优化多次跳转后卡顿问题
  7. kubernetes在腾讯游戏的应用实践
  8. 浏览器端-服务器端-网络、兼容、内核、优化
  9. 3w字 长文干货!100 道 Linux 常见面试题
  10. Fluke Ti401 PRO,TI400+ 热像仪替代老型号FLUKETI400,TI300.TI200