题目链接

题目字面意思是让?变成 . 或#,使得 . 可以连成一片,唯一就把图输出,不唯一就输出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相关推荐

  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. Treasure Island(简单图论题)

    原题:Gym-100971A 题意: n*m图,'.'代表陆地,'#'代表海,'?'未知,问你是否有确定的一片大陆(没有其他点) 解析: 开始的时候没看到条件(一定有一个'.')多写了一大堆判断条件 ...

  4. CF1214D Treasure Island

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

  5. 001_wz_bbk_GCC的介绍与发展历史

    Reference Books An Introduction to GCC Expert C programming reference books A Brief(简短的) History of ...

  6. 003_wz_bbk_Linux下GCC的安装

    安装 打开终端输入: yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake yum -y install wget htt ...

  7. 005_wz_bbk_-v详细信息,-c生成中间文件,链接次序

    Verbose(冗长的) Compilation The '-v' option can be used to display detailed information about the exact ...

  8. 002_wz_bbk_GCC的特点

    Features of GCC GCC is a portable complier -- it runs on most platforms(平台) available today,and can ...

  9. 写出高效率python的90个方法,附案例(python3经典编程案例)

    Effective Python摘录. 一. 培养Pythonic思维 1. 查询自己使用的python版本 import sys print(sys.version_info) print(sys. ...

最新文章

  1. matlab 实例均命名为,MATLAB复习题
  2. Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
  3. 《php中文网教学管理系统》总结
  4. codeforces 269B Greenhouse Effect
  5. MYBATIS 根据IN条件查询时,数据只查第一个的问题(字符串被截断......)
  6. ajax request headers,ajax request VS normal request
  7. Jquery实用笔记
  8. Redis流水线性能提高
  9. 618“后高考经济”数据:3C数码依旧是毕业季的首选礼品
  10. 字节跳动 CEO 张楠谈遭微信封禁;传蚂蚁集团将重组 ;Apache ECharts 5 发布| 极客头条...
  11. jconsole中无法显示本地启动的tomcat
  12. STM32 高级定时器 输出PWM波
  13. 平面向量内积坐标公式推导_向量的数量积的坐标运算公式是如何推导出的 两个向量的向量积公式是怎...
  14. java标签用setbounds_setBounds的用法
  15. docker重启参数--restart=always的作用
  16. Spring 源码--Bean 实例化
  17. 论文阅读:A Unified Span-Based Approach for Opinion Mining with Syntactic Constituents
  18. python方括号和圆括号_python方括号和圆括号
  19. Miller_Rabin和Pollard_Rho算法
  20. 对今天知识的回顾15

热门文章

  1. windows九大权限的分析与利用
  2. php通信软件培训,小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口...
  3. ArcGIS 栅格计算器con()函数用法
  4. mysql命令行不支持中文_解决MySQL命令行不支持中文的问题
  5. 程序员去美国工作:2015年H1B抽签结果与分析
  6. java异常标记_如何修复'java.io.IOException异常:toDerInputStream在上启动spring应用程序时拒绝标记类型60'本地主机:8443...
  7. Skywalking使用与探针机制
  8. C#实现生产者与消费者关系
  9. 湖北二本计算机大学录取分数线,湖北二本投档分数线
  10. 华为笔记本触控板手势操作_如何在笔记本电脑触控板上使用Windows 8的手势