GYM Samara16 A Treasure Island 暴力
来源:互联网 发布:淘宝企业店铺 企业资质 编辑:程序博客网 时间:2024/09/21 06:18
题意:n*m的地图,'#'表示障碍, '.'表示land, '?'表示待定. 可以上下左右移动.
问是否能将地图上所有的'?'变为'.'或者'#' 使得地图上只有一个联通分量.
n,m<=50. 无解输出impossible ,若有多解 则输出ambiguous. 只有一解输出变化后的地图.
先把所有的'?'都变为'.' 还是有多少个联通分量时
如果有某个个联通分量全部都为'?则把该摧毁该连通分量,直到联通分量个数为1为止.
若此时联通分量个数还是>1则无解.
现在只有一个联通分量
若把'?'的某个集合{p1,p2,..pk] 由'.'变为'#'时联通分量个数还是1.那么单独把某个pi变为'#',此时联通分量个数还是1.
问是否能将地图上所有的'?'变为'.'或者'#' 使得地图上只有一个联通分量.
n,m<=50. 无解输出impossible ,若有多解 则输出ambiguous. 只有一解输出变化后的地图.
先把所有的'?'都变为'.' 还是有多少个联通分量时
如果有某个个联通分量全部都为'?则把该摧毁该连通分量,直到联通分量个数为1为止.
若此时联通分量个数还是>1则无解.
现在只有一个联通分量
若把'?'的某个集合{p1,p2,..pk] 由'.'变为'#'时联通分量个数还是1.那么单独把某个pi变为'#',此时联通分量个数还是1.
枚举把某个'?'由'.'变为'#' 若此时联通分量个数还是1,则有多解 O(n^2 m^2).
#include <bits/stdc++.h>using namespace std;typedef pair<int,int> ii;const int N=55;char s[N][N];int n,m,vis[N][N],mp[N*N],num=0,tot=0;int dx[]={-1,1,0,0};int dy[]={0,0,-1,1};vector<ii> a;void dfs(int x,int y){vis[x][y]=1;tot++;if(s[x][y]=='?')num++;for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(a>=1&&a<=n&&b>=1&&b<=m&&(!vis[a][b])&&s[a][b]!='#')dfs(a,b);}}void fun(int x,int y){vis[x][y]=1;s[x][y]='#';//cout<<x<<' '<<y<<endl;for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(a>=1&&a<=n&&b>=1&&b<=m&&(!vis[a][b])&&s[a][b]=='?')fun(a,b);}}int check(){int cnt=0;memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(s[i][j]!='#'&&!vis[i][j])dfs(i,j),cnt++;return cnt;}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%s",s[i]+1);for(int j=1;j<=m;j++)if(s[i][j]=='?')a.push_back(ii(i,j));}int p=0;if(check()>1){for(int i=0;i<a.size();i++){if(s[a[i].first][a[i].second]=='#')continue; num=tot=0;memset(vis,0,sizeof(vis));dfs(a[i].first,a[i].second);//cout<<i<<' '<<num<<' '<<tot<<endl;if(num==tot){memset(vis,0,sizeof(vis));fun(a[i].first,a[i].second);}}if(check()>1){puts("Impossible");return 0;}}bool flag=true;for(int i=p;i<a.size();i++){int x=a[i].first,y=a[i].second;if(s[x][y]=='#')continue;s[x][y]='#';if(check()==1)flag=false;s[x][y]='.';}if(!flag)puts("Ambiguous");elsefor(int i=1;i<=n;i++)printf("%s\n",s[i]+1);return 0;}
阅读全文
0 0
- GYM Samara16 A Treasure Island 暴力
- Gym 100971A Treasure Island
- GYM 100971 A.Treasure Island(dfs+并查集)
- Codeforces 106D Treasure Island 预处理前缀和+暴力(水
- Gym 101470A Banks【暴力】
- (二分,BFS).Treasure Island
- Gym - 100203A Ariel 暴力+位运算
- Gym 100531A Alarm Clock 【水题】【暴力】
- GYM 101128 A.Promotions【思维+暴力】
- Codeforces 106 D Treasure Island
- cf 106d Treasure Island
- HDU 2416 Treasure of the Chimp Island
- Treasure of the Chimp Island hdu bfs
- POJ 3346 Treasure of theChimp Island(BFS)
- Treasure of the Chimp Island (BFS
- CFgym:Treasure Island(搜索 & 思维)
- A LONELY ISLAND
- 634A.Island Puzzle
- 深度学习|卷积神经网络(CNN)介绍(前篇)
- 框架集合练习题
- 关于内网穿透
- 三线接入
- properties 读取 字符串
- GYM Samara16 A Treasure Island 暴力
- Android填坑之旅(第二十二篇)使用友盟社会化分享的碰到的坑
- ABB多机器人坐标系之间的关系
- 17年 12月22日学习计划
- 编译与链接(一)——编译
- 如果ABBYY FineReader 14识别某些字符失败
- Linux/Windows下修改Mysql的用户(root)的密码
- suspendlayout,resumelayout,layout,performlayout【转】
- 线程