A - Treasure Island

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

standard input/output 
Announcement

 
  • Statements

    Pirate John Silver has found a map depicting exactly one island in a sea. The map is a piece of cloth divided into cells: n cells in height and m cells in width. John Silver knows that every cell denotes either land or water, but some of the cells are erased, and now it's absolutely impossible to say what these cells represent.

    Help John Silver to restore the map of the island. An island is a non-empty set of land cells connected in four directions (up, down, left and right).

Input

The first line contains two integers n and m(1 ≤ n,  m ≤ 50) — the sizes of the map.

Each of the next n lines contains m characters and describes the map. A character is equal to «#» if this cell is a water cell, «.» if it's a land cell, and «?» if this cell is erased.

It's guaranteed that the input contains at least one character «.» and at least one character «?».

Output

If it's not possible to restore the map so that it would depict exactly one island, output «Impossible».

If the map can be restored in a unique way, output n lines of m characters in the same format as they are in the input, but replacing «?» with «.» or «#».

And if there are several correct ways to restore the map, output «Ambiguous».

Sample Input

Input
5 7

#######

#..#..#

#..?..#

#..#..#

#######
Output
#######

#..#..#

#.....#

#..#..#

#######
Input
5 7

#######

#...#.#

#.?.?.#

#.#...#

#######
Output
Ambiguous
Input
5 7

#######

#.#.#.#

#.#?#.#

#.#.#.#

#######
Output
Impossible

题意:给你一个地图,'#'代表水,'.'代表陆地,'?'代表擦去的地图,可能是'#'也可能是'.'。地图中本该只有一块相连的陆地,若只有一种方案则输出确定的地图。若有多种方案,则输出‘Ambiguous’,若无答案,则输出‘Impossible’。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std; #define MM(a,b) memset(a,b,sizeof(a));
#define inf 0x7f7f7f7f;
#define FOR(i,n) for(int i=1;i<=n;i++)
#define CT continue; char sc[55][55];
int a[55][55],n,m,s,vis[55][55]; int dx[]={-1,0,0,1,-1};
int dy[]={-1,1,-1,0,0}; void dfs(int x,int y)
{
vis[x][y]=1;
s++;
FOR(i,4) {
int xx=x+dx[i],yy=y+dy[i];
if(a[xx][yy]&&!vis[xx][yy]) dfs(xx,yy);
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
MM(a,0);MM(vis,0);
int x,y,cnt=0;
FOR(i,n) {
scanf("%s",sc[i]+1);
FOR(j,m) if(sc[i][j]=='.') {a[i][j]=1;x=i;y=j;}
else if(sc[i][j]=='?') a[i][j]=2;
}
FOR(i,n) FOR(j,m)
if(a[i][j]==1&&!vis[i][j]){
s=0;cnt++;
dfs(i,j);
}
if(cnt>1) {printf("Impossible\n");CT;}
int s0=s,ok=0;
for(int i=1;i<=n&&!ok;i++) for(int j=1;j<=m&&!ok;j++)
if(a[i][j]==2){
MM(vis,0);
a[i][j]=0;
s=0;
dfs(x,y);
if(s==s0) ;
else if(s==s0-1) ok=1;
else a[i][j]=1;
}
if(ok) {printf("Ambiguous\n");CT;}
FOR(i,n) {
FOR(j,m)
if(a[i][j]) printf(".");
else printf("#");
printf("\n");
}
}
return 0;
}

思维错误点:一直想着怎么用并查集去连接大陆,结果还要特殊处理下,?与周围.和#的 各种排列

关系,复杂多了;

 

分析:这道题在思维上有难度,看了题解,有好几个值得学习的地方;

1. 将图之外的区域和不能访问的#设置为0,这样就避免了额外判断边界。

2.判断一个?是否是连接陆地所必要的,采用控制变量法,先假设其他的?都是陆地,这块陆地是

海洋那么从某个已经确定的陆地搜一遍,如果得到的陆地的个数跟原来的一样,那么这个?肯定是在

大陆不能访问到的大海中,肯定设为0,如果比原来陆地个数小1,那么这块?区域对于连接大陆不是必要的

那么ambiguous了,如果不是以上两种情况,则显然是必要的,那么设置为1,然后再去判断其他的?;

Gym 100971A Treasure Island BFS 思维题的更多相关文章

  1. Gym - 101572D Distinctive Character bfs 思维

    题目传送门 题目大意: 给出n个01串,让你构造一个字符串,使这个字符串和这些字符串中相似程度最高 尽可能低.如果两个字符串对应位置相同,则相似程度加一. 思路: 每一个01串更改自己的一部分后,都可 ...

  2. D. Treasure Hunting ( 思维题 , 贪心)

    传送门 题意: 在一个 n * m 的地图里,有 k 个宝藏,你的起点在 (1, 1), 每次你能 向下向右向左移动(只要在地图里):      现在,有 q 个安全的列, 你只有在这些列上面,你才能 ...

  3. UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)

    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...

  4. 思维题 Gym 100553A Alter Board

    题目传送门 /* 题意:一个n×m的矩形,相邻的颜色不同,黑或白.问最少的翻转次数,每次翻转可指定任意一个子矩形 思维题:最少要把偶数行和列翻转,也就是n/2+m/2次 */ #include < ...

  5. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

  6. hdu5325 树的思维题

    pid=5325">http://acm.hdu.edu.cn/showproblem.php? pid=5325 Problem Description Bobo has a tre ...

  7. D. Treasure Island

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

  8. [Codeforces 1214D]Treasure Island(dfs)

    [Codeforces 1214D]Treasure Island(dfs) 题面 给出一个n*m的字符矩阵,'.'表示能通过,'#'表示不能通过.每步可以往下或往右走.问至少把多少个'.'变成'#' ...

  9. DFS/BFS+思维 HDOJ 5325 Crazy Bobo

    题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...

随机推荐

  1. Centos yum 安装 rabbitmq-server

    安装rabbitmq-server yum install -y rabbitmq-server   开启后台管理 rabbitmq-plugins enable rabbitmq_managemen ...

  2. 【Havel 定理】Degree Sequence of Graph G

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...

  3. luogu P2765 魔术球问题 (最小路径覆盖)

    大意:给定n根柱子, 依次放入1,2,3,...的球, 同一根柱子相邻两个球和为完全平方数, 求最多放多少个球. 对和为平方数的点连边, 就相当于求DAG上最小路径覆盖. #include <i ...

  4. tensorflow零起点快速入门(4) --入门常用API

    tf.reduce_mean https://blog.csdn.net/he_min/article/details/78694383 计算均值,全部数字的均值,纵向一维的均值,横向一维的均值 tf ...

  5. Unity Button按钮延迟

    1.把下面脚本放到Editor文件夹下,这样脚本继承Button之后,新声明的public变量才能在Inspector面板显示出来. using System.Collections; using S ...

  6. SQLite数据库_c/s架构的心得

    1.使用是Navicat Premium软件, Microsoft Windows版本. 2.选择SQLite并新建数据库: 3.将建好的SQLite数据库,放到新建的项目的debug文件下中, 并在 ...

  7. .NET中跨线程访问winform控件的方法

    1 第一种方式 MethodInvoker invoker = () => { richTextBox1.AppendText(_ClientSocketModelConnectedEvent. ...

  8. SQL*Loader 的使用sqlldr和sqluldr2方法详解

    oracle数据导出工具sqluldr2可以将数据以csv.txt等格式导出,适用于大批量数据的导出,导出速度非常快.导出后可以使用oracle loader工具将数据导入.简介:Sqluldr2:专 ...

  9. ZooKeeper--动物管理员

    复杂的软件集群系统从来绕不开高可用.负载均衡等问题,大数据系统更是如此. 高可用:计算机系统的可用性定义为系统保持正常运行时间的百分比,具体手段有自动检测,自动切换,自动恢复等. 负载均衡:主要解决单 ...

  10. SQL语句复习【专题四】

    SQL语句复习[专题四] 多表查询 sql 92多表查询 sql92.sql99 标准--查询所有员工的姓名,部门编号,部门名称select * from empselect * from dept- ...