Gym 100971A Treasure Island
题目链接
题目字面意思是让?变成 . 或#,使得 . 可以连成一片,唯一就把图输出,不唯一就输出Ambiguous,否则Impossible.
先将所有的 . dfs遍历一遍,记录有几块相连的陆地数k,并记录扫过的格子数cnt_s,途中遇到的?就把它当成 . ,如果有没遇到的?说明被#包围,则这个?一定为#。遍历完后,如果k>1,那么肯定是Imossible,如果k为1,再把dfs过程中遇到的每一个?当成#,分别在dfs,计算相连的陆地数cnt,如果有cnt==cnt_s-1,那么有多解,否则解唯一。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define MAX_N 55
using namespace std;
char map[MAX_N][MAX_N];
int n,m;
int cnt_s;
int cnt_p;
int cnt;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
bool vis[MAX_N][MAX_N];
void dfs(int sx,int sy)
{vis[sx][sy]=true;for(int i=0;i<4;i++){int tx=sx+dx[i];int ty=sy+dy[i];if(tx>=0&&tx<n&&ty>=0&&ty<m&&map[tx][ty]!='#'&&!vis[tx][ty]){cnt++;if(map[tx][ty]=='?')map[tx][ty]='*';//标记走过的? vis[tx][ty]=true;dfs(tx,ty);}}return ;
}
int main(void)
{while(scanf("%d%d",&n,&m)==2){cnt_p=0;int sx,sy;for(int i=0;i<n;i++)scanf("%s",map[i]);memset(vis,false,sizeof(vis));int k=0;//k块陆地 for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(map[i][j]=='.'&&!vis[i][j]){k++;cnt=1;dfs(i,j);sx=i;sy=j;}}}if(k>1){printf("Impossible\n");continue;}cnt_s=cnt;bool ok=false;for(int i=0;i<n&&!ok;i++){for(int j=0;j<m&&!ok;j++){cnt=1;if(map[i][j]=='*'){memset(vis,false,sizeof(vis));map[i][j]='#';dfs(sx,sy);if(cnt==cnt_s-1)ok=true;map[i][j]='.';}}}if(ok)printf("Ambiguous\n");else{for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(map[i][j]=='.')printf("."`
;elseprintf("#");}printf("\n");}}}return 0;
}
Gym 100971A 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 ...
- Treasure Island(简单图论题)
原题:Gym-100971A 题意: n*m图,'.'代表陆地,'#'代表海,'?'未知,问你是否有确定的一片大陆(没有其他点) 解析: 开始的时候没看到条件(一定有一个'.')多写了一大堆判断条件 ...
- CF1214D Treasure Island
考虑一种新手都打得出的方法:bfs. 首先从终点反向bfs,搜出所有能到达终点的点.然后我们从起点开始bfs,把那些能到终点的没访问过的点入队,找到终点直接结束,而答案就是任意时刻队列里点的数量的最小 ...
- 001_wz_bbk_GCC的介绍与发展历史
Reference Books An Introduction to GCC Expert C programming reference books A Brief(简短的) History of ...
- 003_wz_bbk_Linux下GCC的安装
安装 打开终端输入: yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake yum -y install wget htt ...
- 005_wz_bbk_-v详细信息,-c生成中间文件,链接次序
Verbose(冗长的) Compilation The '-v' option can be used to display detailed information about the exact ...
- 002_wz_bbk_GCC的特点
Features of GCC GCC is a portable complier -- it runs on most platforms(平台) available today,and can ...
- 写出高效率python的90个方法,附案例(python3经典编程案例)
Effective Python摘录. 一. 培养Pythonic思维 1. 查询自己使用的python版本 import sys print(sys.version_info) print(sys. ...
最新文章
- matlab 实例均命名为,MATLAB复习题
- Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
- 《php中文网教学管理系统》总结
- codeforces 269B Greenhouse Effect
- MYBATIS 根据IN条件查询时,数据只查第一个的问题(字符串被截断......)
- ajax request headers,ajax request VS normal request
- Jquery实用笔记
- Redis流水线性能提高
- 618“后高考经济”数据:3C数码依旧是毕业季的首选礼品
- 字节跳动 CEO 张楠谈遭微信封禁;传蚂蚁集团将重组 ;Apache ECharts 5 发布| 极客头条...
- jconsole中无法显示本地启动的tomcat
- STM32 高级定时器 输出PWM波
- 平面向量内积坐标公式推导_向量的数量积的坐标运算公式是如何推导出的 两个向量的向量积公式是怎...
- java标签用setbounds_setBounds的用法
- docker重启参数--restart=always的作用
- Spring 源码--Bean 实例化
- 论文阅读:A Unified Span-Based Approach for Opinion Mining with Syntactic Constituents
- python方括号和圆括号_python方括号和圆括号
- Miller_Rabin和Pollard_Rho算法
- 对今天知识的回顾15
热门文章
- windows九大权限的分析与利用
- php通信软件培训,小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口...
- ArcGIS 栅格计算器con()函数用法
- mysql命令行不支持中文_解决MySQL命令行不支持中文的问题
- 程序员去美国工作:2015年H1B抽签结果与分析
- java异常标记_如何修复'java.io.IOException异常:toDerInputStream在上启动spring应用程序时拒绝标记类型60'本地主机:8443...
- Skywalking使用与探针机制
- C#实现生产者与消费者关系
- 湖北二本计算机大学录取分数线,湖北二本投档分数线
- 华为笔记本触控板手势操作_如何在笔记本电脑触控板上使用Windows 8的手势