Treasure Island(简单图论题)
原题: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(简单图论题)相关推荐
- Treasure Island CodeForces - 1214D(dfs)
All of us love treasures, right? That's why young Vasya is heading for a Treasure Island. Treasure I ...
- D. Treasure Island
D. Treasure Island dfs大法好== 写半天bfs疯狂MLE dfs标记掉路上的一些点 然后再跑一遍dfs #include<bits/stdc++.h> using n ...
- Gym 100971A Treasure Island
题目链接 题目字面意思是让?变成 . 或#,使得 . 可以连成一片,唯一就把图输出,不唯一就输出Ambiguous,否则Impossible. 先将所有的 . dfs遍历一遍,记录有几块相连的陆地数k ...
- CF1214D Treasure Island
考虑一种新手都打得出的方法:bfs. 首先从终点反向bfs,搜出所有能到达终点的点.然后我们从起点开始bfs,把那些能到终点的没访问过的点入队,找到终点直接结束,而答案就是任意时刻队列里点的数量的最小 ...
- jasperreports_JasperReports JSF插件用例–简单列表报告
jasperreports 这是JasperReports JSF插件系列的第一篇"用例文章" ,我将专注于一个简单的需求,并且我将进一步深入. 起点是我们已经为图书商店完成的项目 ...
- Spring Data Solr入门
Spring Data Solr是Spring Data项目的扩展,该项目旨在简化Apache Solr在Spring应用程序中的使用. 请注意,这不是Spring(数据)或Solr的简介. 我认为您 ...
- JasperReports JSF插件用例–简单列表报告
这是JasperReports JSF插件系列的第一篇"用例文章" ,我将专注于一个简单的需求,并且我将进一步深入. 起点是我们已经为图书商店完成的项目设置,我将向其中添加一个列表 ...
- 前端绘制绘制图表_绘制我的文学风景
前端绘制绘制图表 Back when I was a kid, I used to read A LOT of books. Then, over the last couple of years, ...
- ios备份应用数据_如何在iOS设备之间备份和复制数据
ios备份应用数据 Although iTunes usually does a good enough job backing up your data, the backups are encry ...
最新文章
- 中国发布自主开发的域名系统基础软件 “红枫”
- 多线程:synchronize、volatile、Lock 的区别与用法
- 年末最大AI盛典!2020深度学习开发者峰会报名启动
- 10树莓派Samba的安装与配置
- 3.15 排列对称串
- XP计算机里改单核,XP中多核处理器只显示单核
- python颜色代码表_[matplotlib] 颜色设置及Matplotlib颜色对照表
- HCIA RS题库及解析(2018版)
- Wireshark实验 - DNS
- openGL实现太阳系行星系统
- 【学术相关】过来人对研究生阶段的学习建议
- word分栏排版时 插入全页宽的表格
- 若初见,若寻常,若是一双人
- 小米嵌入式研发工程师校招面试总结
- python中set option_python的set_option选择
- vue中使用echarts实现动态数据绑定、获取后端接口数据
- oracle 不使用结果缓存,为什么Oracle 12.1.0.2会跳过结果缓存表上的函数调用?
- Redis集群方案及实现
- 成为DevOps/SRE工程师有多难?看看这份必备技能清单
- 22产品经理需要具备的推广能力
热门文章
- cmd 文本文件分割,如何在Windows中分割大文本文件?
- 浅谈征信大数据与撸贷
- 学习黑盒优化算法CMA和RandomSearch,借助阿里达摩院MindOpt的RABBO榜单【系列2/4】
- poi jar包报错:java.lang.NoSuchFieldError:Factory
- 提示错误信息:ZeroDivisionError: division by zero的解决方法
- 微信小程序优化多次跳转后卡顿问题
- kubernetes在腾讯游戏的应用实践
- 浏览器端-服务器端-网络、兼容、内核、优化
- 3w字 长文干货!100 道 Linux 常见面试题
- Fluke Ti401 PRO,TI400+ 热像仪替代老型号FLUKETI400,TI300.TI200