题目链接

题目字面意思是让?变成 . 或#,使得 . 可以连成一片,唯一就把图输出,不唯一就输出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. kafka 主动消费_SpringBoot2 整合Kafka组件,应用案例和流程详解
  2. 第一天入职,备用vs快捷键大全
  3. 用反向传导模拟电子运动并模拟HF,HCl,HBr
  4. signature=6a8815f5009aacac86e725bea54f840f,A wave packet signature for complex networks
  5. [Machine learning] 国外程序员整理的机器学习资源大全
  6. typescript数组,对象,接口实例
  7. Go Micro搭建简单微服务
  8. ElasticSearch多字段查询best_fieldsmost_fields
  9. windows上安装使用mySql
  10. 为什么物联网产品迫切需要良好的 UI/UX 设计?
  11. android获取组件id,Android 获取控件id的三种方式
  12. python学习笔记--Django入门二 Django 的模板系统
  13. oracle数据库的sql语句练习1
  14. 免费的两种https证书申请和安装
  15. Tomcat8+Redis集群解决会话共享
  16. Web的缓存加速(Squid的安装与配置)
  17. 电影票房预测-kaggle项目Python项目
  18. “华远新能源”:光伏产业链发展持续向好
  19. QT 添加图片资源 显示图片
  20. 算法 64式 7、搜索算法整理_第3部分_31到45题

热门文章

  1. linux缓冲区 即 块
  2. 找出词典中的所有的变位词 --By LXW
  3. 一个数据库超全,支持免费高速下载专利的资源库--欧洲专利局Espacenet
  4. 2022-2028年中国红枣行业发展模式分析及市场分析预测报告
  5. lcd屏和amoled屏哪个护眼呢 lcd屏和amoled屏哪个更耗电
  6. CodeForces 597 A. Divisibility(坑,满满的都是坑)
  7. mysql LOCATE() 函数 模糊查询,类似like %%
  8. ArcGIS 栅格计算器 Con用法
  9. [USACO13NOV]Crowded Cows
  10. As-Projective-As-Possible Image Stitching with Moving DLT阅读笔记