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. O033、Terminate Instance 操作详解

    参考https://www.cnblogs.com/CloudMan6/p/5486066.html   本节通过日志详细分析 Nova Terminate 操作.Terminate 操作就是删除 i ...

  2. 初识python之了解其背景和安装

    1.Python的发展 Python语言诞生于1990年,由Guido van Rossum设计并领导开发.1989年12月,Guido考虑启动一个开发项目以打发圣诞节前后的时间,所以决定为当时正在构 ...

  3. 打印从1到最大的n位数(考虑大数问题)

    void Print1ToMaxOfNDigits(int n) { if(n <= 0) { return; } int * number = new int[n]; for(int i = ...

  4. git clone ssh 时出现 fatal: Could not read from remote repository

    一.问题及解决办法参考: 在 ubuntu 中,要把 GitHub 上的储存库克隆到计算机上时,执行如下命令: git clone git@github.com:USER-NAME/REPOSITOR ...

  5. centos7 修改时区,同步时间,Mysql修改时区

    查看时区 timedatectl status [root@localhost nova-back]# timedatectl status Local time: Thu 2019-05-23 15 ...

  6. 1 .net将xml反序列化

    public static T XmlToObject<T>(string str) where T : class { using (Stream stream = new Memory ...

  7. [LeetCode]1089. Duplicate Zeros

    Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remainin ...

  8. Eclipse配置Maven的本地仓库和阿里云镜像 加速Maven更新

    先确定自己电脑是否安装了Maven和安装位置,具体查询方法直接win+R键打开运行窗口,输入cmd打开dos窗口,再输入mvn -v即可查询安装的位置 拿到安装位置 D:\Applications\W ...

  9. GraphX介绍

    转自:https://www.cnblogs.com/txq157/p/5978747.html 1.GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理框架,它 ...

  10. 8.CNN应用于手写字识别

    import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.mode ...