计蒜客:王子救公主---dfs
题目描述:
一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了。于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面。由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人走上的拯救自己公主的路途。
碰巧的是巫婆出去了,迷宫也不大,蒜头君可以直接和公主对话,于是两个人便开始相互靠近。每一步移动只能朝着上下左右四个方向走一格,不能走进墙所在的位置。蒜头君救公主心切,一次必须沿着一个方向走两步(允许跨越迷宫中的墙);公主柔弱,一次只能走一步。问在这个迷宫中,蒜头君是否可以救出公主(蒜头君和公主相遇后,就能背着公主逃出迷宫了)。
输入格式
第一行输入两个整数 n(1≤n≤100), m(1≤m≤100) 表示迷宫的行和列。
然后有一个 n×m 的地图,地图由’.’、’#’、‘w’、‘g’这四个部分组成。’.‘表示可以通行的路,’#'表示迷宫的墙,'w’表示王子开始所在的位置,'g’表示公主开始所在的位置。
输出格式
输出王子是不可以救出自己的公主,如果能救出则输出"yes",否则输出"no"。
样例输入
1 8
w…#.g
样例输出
yes
解题思路:
深搜,搜索到王子和公主可以走得到的所有位置,如果有重叠的位置,则输出yes,否则,输出no。
AC代码:
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string.h>
#include <math.h>
using namespace std;
char map[105][105];
int vis1[105][105];//王子的足迹
int vis2[105][105];//公主的足迹
int n,m;
bool in(int x,int y)
{return x>=0&&x<n&&y>=0&&y<m;
}
void dfs(int x,int y,bool prince)//prince表示是否是王子
{if(!in(x,y)||map[x][y]=='#')return ;if(prince){if(vis1[x][y])return ;}else{if(vis2[x][y])return ;}int step;if(prince){step=2;vis1[x][y]=1;}else{step=1;vis2[x][y]=1;}//准备向四个方向继续走 dfs(x,y+step,prince);dfs(x+step,y,prince);dfs(x,y-step,prince);dfs(x-step,y,prince);
}
int main()
{int i,j;cin>>n>>m;for(i=0;i<n;i++)for(j=0;j<m;j++)cin>>map[i][j];//'.'表示可以通行的路,'#'表示迷宫的墙,'w'表示王子开始所在的位置,'g'表示公主开始所在的位置//公主一次走一步,王子一次走两步int x1,y1;//王子的起止位置 int x2,y2;//公主的起始位置 for(i=0;i<n;i++)for(j=0;j<m;j++){if(map[i][j]=='w'){x1=i;y1=j;}if(map[i][j]=='g'){x2=i;y2=j;}}dfs(x1,y1,true);//王子开始走 dfs(x2,y2,false);//公主开始走 int flag=0;//标记王子是否可以救出公主 for(i=0;i<n;i++){for(j=0;j<m;j++){if(vis1[i][j]&&vis2[i][j]){flag=1;break;}}}if(flag)//可以救出公主 cout<<"yes"<<endl;else//不可以救出公主 cout<<"no"<<endl;return 0;
}
计蒜客:王子救公主---dfs相关推荐
- 计蒜客 王子救公主 dfs
题意:如上,注意王子有可能跨越墙,前提使正好挨着墙. 思路:dfs王子和公主,开一个三维数组分别用vis[x][y][0],vis[x][y][1]标记王子和公主走到的点. 若存在二点相交即(vis[ ...
- java王子救公主的游_计蒜客 王子救公主(DFS)
一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人 ...
- 王子救公主 (计蒜客)一道简单DFS
蓝桥杯不能粘贴 只能截图.. 这道题目很简单,主要想清楚 只要存在王子和公主都能到达的点,王子就能救出公主(此时必定有一个时刻可以让他们相遇) #include <bits/stdc++.h& ...
- 计蒜客-T1771-文具店-DFS
题目描述: 蒜头君来到文具店,选择了k 支自己喜欢的水彩笔,并抄下了它们的价格.可是到结算时,他发现自己抄价格时抄得太密集,以至于所有价格连成了一个数字串.老板想和蒜头君开个玩笑,于是对他说:&quo ...
- 计蒜客-青出于蓝胜于蓝 dfs+树状数组
题目描述: 武当派一共有 n人,门派内 n 人按照武功高低进行排名,武功最高的人排名第 1,次高的人排名第 2,... 武功最低的人排名第 n.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都 ...
- 计蒜客-踏青(DFS)
蒜头君和他的朋友周末相约去召唤师峡谷踏青.他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地.草丛通过上下左右 444 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都 ...
- [计蒜客][dfs]中国象棋
题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 深度优先搜索 题目描述 样例读入 .#....#S# ..#.#.#.. ..##.#..# ......##. ...T..... ... ...
- 无脑博士的试管们java_计蒜客 无脑博士和他的试管们
标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...
- H - Prince and Princess 计蒜客 - 42402
H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...
最新文章
- 3人2周上线,2人1周上线,Solo明天上线!开发周期果然不能用搬砖模式计算......
- python经典小游戏-python零基础入门的小游戏。
- HTTP代理神器Fidder
- 数据结构源码笔记(C语言):可变长度字符串的快速排序
- php里面sql是什么意思,MySQL和SQL是什么?MySQL和SQL之间的区别有哪些
- 高考失常错过清华,而今保送清华直博,还发了数篇 Nature
- sass使用相关报错
- Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解
- Echars折线配置详解
- RTX5 | 线程管理03 - 线程退出osThreadExit
- Log4J基础详解及示例大全
- ADB工具安装及常用命令
- CS5460基本读写程序(无bug版本)
- phalapi 开发流程
- kubernetes lowB安装方式
- The bussiness flow between DWM and ECC
- Win10 如何进入WinRE模式?
- 流媒体协议之WebRTC实现p2p视频通话(二)
- vlc录制网络流_vlc如何播放网络流
- 华东师范计算机学硕839,华东师范大学-839-2015-计算机考研-真题.pdf