DFS练习——王子救公主
一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了。于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面。由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人走上的拯救自己公主的路途。
碰巧的是巫婆出去了,迷宫也不大,蒜头君可以直接和公主对话,于是两个人便开始相互靠近。每一步移动只能朝着上下左右四个方向走一格,不能走进墙所在的位置。蒜头君救公主心切,一次必须沿着一个方向走两步(允许跨越迷宫中的墙);公主柔弱,一次只能走一步。问在这个迷宫中,蒜头君是否可以救出公主(蒜头君和公主相遇后,就能背着公主逃出迷宫了)。
输入格式
第一行输入两个整数 n(1≤n≤100), m(1≤m≤100) 表示迷宫的行和列。
然后有一个 n×m 的地图,地图由'.'
、'#'
、'w'
、'g'
这四个部分组成。'.'
表示可以通行的路,'#'
表示迷宫的墙,'w'
表示王子开始所在的位置,'g'
表示公主开始所在的位置。
输出格式
输出王子是不可以救出自己的公主,如果能救出则输出"yes"
,否则输出"no"
。
样例输入复制
1 8 w....#.g
样例输出复制
yes
思路:
这道题的关键是,需要两次搜索,分别表示王子和公主走过的路
然后看看是否他们可以走过同一个位置
如果可以,说明可以救出
代码:
#include<iostream>
using namespace std;
int n,m;
int ax,ay,bx,by;
char s[105][105];
int w[105][105],g[105][105]; //记录王子公主所经过的点
//int step_2[4][2] = {{2,0},{-2,0},{0,2},{0,-2}};
int step[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int vis[105][105][3]; //标记是否走过,第三维度表示是公主走的还是王子void dfs(int x, int y, int tar)
{if(s[x][y] == '#')return ;if(tar == 2) //王子 w[x][y] = 1; //记录王子经过的点 if(tar == 1)g[x][y] = 1; //记录公主经过的点 for(int i=0;i<4;i++){int tx = x + tar * step[i][0];int ty = y + tar * step[i][1];if(tx<=0 || tx>n || ty<=0 || ty>m)continue;if(!vis[tx][ty][tar]){vis[tx][ty][tar] = true;dfs(tx, ty, tar); } }return ;
} int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m;for(int i=1; i<=n;i++){for(int j=1; j<=m;j++){cin>>s[i][j];if(s[i][j] == 'w'){ //记录王子的坐标 ax = i; ay = j;}if(s[i][j] == 'g'){bx = i; by = j;} }}dfs(ax, ay, 2); //由王子进行搜索,标记出所有王子到达的点 dfs(bx, by, 1);//由公主进行搜索,标记出所有公主到达的点for(int i=1; i<=n;i++){for(int j=1; j<=m;j++){//若王子公主能到达同一点,则可以救出 if(w[i][j] == g[i][j] && w[i][j] && g[i][j]){cout<<"yes"<<endl;return 0;}}}cout<<"no"<<endl;return 0;
}
DFS练习——王子救公主相关推荐
- 【DFS题型九/双向DFS】王子救公主
题目描述: 一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头 ...
- java王子救公主的游_计蒜客 王子救公主(DFS)
一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人 ...
- 计蒜客:王子救公主---dfs
题目描述: 一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头 ...
- 计蒜客 王子救公主 dfs
题意:如上,注意王子有可能跨越墙,前提使正好挨着墙. 思路:dfs王子和公主,开一个三维数组分别用vis[x][y][0],vis[x][y][1]标记王子和公主走到的点. 若存在二点相交即(vis[ ...
- 王子救公主(DFS)
样例输入 1 8 w....#.g 样例输出 yes 解题思路: 两次搜索: 1.第一次对王子进行搜索,标记王子能到达的所有点. 2.第二次对公主进行搜索,如果公主能到达王子标记过的点,那么说明王子可 ...
- 王子救公主 (计蒜客)一道简单DFS
蓝桥杯不能粘贴 只能截图.. 这道题目很简单,主要想清楚 只要存在王子和公主都能到达的点,王子就能救出公主(此时必定有一个时刻可以让他们相遇) #include <bits/stdc++.h& ...
- 【DFS专题训练】王子救公主 C++程序题
题目描述 王子走两步,公主走一步,遇到#不能走,他们能否碰上 输入 1 8 w-#.g 输出 yes 思路 王子深搜一次记录走过的地方,公主深搜一次记录走过的地方,如果都走过就返回yes #inclu ...
- 【深度优先搜索】计蒜客:王子救公主
思路:用两次深度优先搜索,数组vis1标记王子可能到达的点,数组vis2标记公主可能到达的点: 如果两个数组有重复的标记的坐标,那么王子可以救出公主 !标记所有可能情况的深度优先搜索不需要回溯! 如果 ...
- “趣味”or“烧脑”算法 之 王子救公主
| 题引 相信大部分人童年都玩过大富豪这样一类的棋,棋格上面有加多少分,减多少分等等设置,比赛最终谁的分值最多(类似下面这个棋盘) | 正题 设置小游戏为一个二维矩阵, 王子位于左上角,公主位于右下角 ...
最新文章
- 最早接触到的计算机编程语言——c语言
- js练习 好友列表选择
- 复现经典:《统计学习方法》第18章 概率潜在语义分析
- 1SE rule details in CCP pruning of CART
- ASP渲染下拉框使时间依次减少
- prometheus 笔记
- jQuery Ajax - ajax()方法,参数注释
- 一些常用PLSQL语句 和事务
- Arduino 下载https://downloads.arduino.cc/packages/package_index.json时出错
- PyCharm快捷键
- 手机变蓝牙音响_微信官方收款音箱提示器收款码播报器S1 支付提示音响 无需wifi蓝牙 自带移动网络 手机不在店里也能播报...
- 搭建kafka集群详细步骤
- Unsupervised Degradation Representation Learning for Blind Super-Resolution(基于无监督退化表示学习的盲超分辨率处理)
- 影视短视频剪辑的完整操作流程(普通人也能学会)
- 2017cad光标大小怎么调_cad十字光标怎么调大-调整cad十字光标大小的方法 - 河东软件园...
- windows安装linux
- rtmp支持h265推流
- python是一种什么类型的植物_「蕨类植物」是一种什么类型的植物?
- 廖晓峰重庆大学计算机学院院长,重庆大学廖晓峰教授当选IEEE Fellow
- 3D游戏模型之3D max基础命令
热门文章
- QT5百度地图开发学习——qt调用JavaScript函数并传参
- 中间文字,两边横线css
- Linux C/C++ 对于SIGBUS、SIGSEGV等崩溃异常捕获实现
- python设置tk退出_Python3 tkinter基础 Tk quit 点击按钮退出窗体
- 人大金仓(kingbase8)安装与初始化超详细教程
- #内存泄露# linux常用内存相关命令
- 3.操作系统——CPU的实模式、保护模式和长模式
- 写交织(AXI4不在支持写交织功能)
- C语言——数组指针篇
- 为什么建议大家使用 Linux 开发?爽++