题目描述:

一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了。于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面。由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人走上的拯救自己公主的路途。
碰巧的是巫婆出去了,迷宫也不大,蒜头君可以直接和公主对话,于是两个人便开始相互靠近。每一步移动只能朝着上下左右四个方向走一格,不能走进墙所在的位置。蒜头君救公主心切,一次必须沿着一个方向走两步(允许跨越迷宫中的墙);公主柔弱,一次只能走一步。问在这个迷宫中,蒜头君是否可以救出公主(蒜头君和公主相遇后,就能背着公主逃出迷宫了)。
输入格式
第一行输入两个整数 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相关推荐

  1. 计蒜客 王子救公主 dfs

    题意:如上,注意王子有可能跨越墙,前提使正好挨着墙. 思路:dfs王子和公主,开一个三维数组分别用vis[x][y][0],vis[x][y][1]标记王子和公主走到的点. 若存在二点相交即(vis[ ...

  2. java王子救公主的游_计蒜客 王子救公主(DFS)

    一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了.于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面.由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人 ...

  3. 王子救公主 (计蒜客)一道简单DFS

    蓝桥杯不能粘贴  只能截图.. 这道题目很简单,主要想清楚 只要存在王子和公主都能到达的点,王子就能救出公主(此时必定有一个时刻可以让他们相遇) #include <bits/stdc++.h& ...

  4. 计蒜客-T1771-文具店-DFS

    题目描述: 蒜头君来到文具店,选择了k 支自己喜欢的水彩笔,并抄下了它们的价格.可是到结算时,他发现自己抄价格时抄得太密集,以至于所有价格连成了一个数字串.老板想和蒜头君开个玩笑,于是对他说:&quo ...

  5. 计蒜客-青出于蓝胜于蓝 dfs+树状数组

    题目描述: 武当派一共有 n人,门派内 n 人按照武功高低进行排名,武功最高的人排名第 1,次高的人排名第 2,... 武功最低的人排名第 n.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都 ...

  6. 计蒜客-踏青(DFS)

    蒜头君和他的朋友周末相约去召唤师峡谷踏青.他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地.草丛通过上下左右 444 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都 ...

  7. [计蒜客][dfs]中国象棋

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 深度优先搜索 题目描述 样例读入 .#....#S# ..#.#.#.. ..##.#..# ......##. ...T..... ... ...

  8. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们

    标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...

  9. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

最新文章

  1. 3人2周上线,2人1周上线,Solo明天上线!开发周期果然不能用搬砖模式计算......
  2. python经典小游戏-python零基础入门的小游戏。
  3. HTTP代理神器Fidder
  4. 数据结构源码笔记(C语言):可变长度字符串的快速排序
  5. php里面sql是什么意思,MySQL和SQL是什么?MySQL和SQL之间的区别有哪些
  6. 高考失常错过清华,而今保送清华直博,还发了数篇 Nature
  7. sass使用相关报错
  8. Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解
  9. Echars折线配置详解
  10. RTX5 | 线程管理03 - 线程退出osThreadExit
  11. Log4J基础详解及示例大全
  12. ADB工具安装及常用命令
  13. CS5460基本读写程序(无bug版本)
  14. phalapi 开发流程
  15. kubernetes lowB安装方式
  16. The bussiness flow between DWM and ECC
  17. Win10 如何进入WinRE模式?
  18. 流媒体协议之WebRTC实现p2p视频通话(二)
  19. vlc录制网络流_vlc如何播放网络流
  20. 华东师范计算机学硕839,华东师范大学-839-2015-计算机考研-真题.pdf

热门文章

  1. 毕业设计 单片机火灾报警系统设计与实现 - stm32 嵌入式
  2. linux SIGSEGV信号 内存访问错误 Segmentation fault
  3. [mysql]my.cnf在哪里
  4. 发现自己的长处,深入自己擅长的事情
  5. Linux智能家居项目
  6. 双因素认证令牌_(完整版)双因素认证解决方案
  7. Openshift架构理解v3.11
  8. 【搬运】电源管理芯片引脚定义
  9. DIV自动填满剩余空间
  10. ISO26262解析(九)——系统部分