题目描述:

一天,蒜头君梦见自己当上了王子,但是不幸的是,自己的公主被可恶的巫婆抓走了。于是蒜头君动用全国的力量得知,自己的公主被巫婆抓进一个迷宫里面。由于全国只有蒜头君自己可以翻越迷宫外的城墙,蒜头君便自己一人走上的拯救自己公主的路途。
碰巧的是巫婆出去了,迷宫也不大,蒜头君可以直接和公主对话,于是两个人便开始相互靠近。每一步移动只能朝着上下左右四个方向走一格,不能走进墙所在的位置。蒜头君救公主心切,一次必须沿着一个方向走两步(允许跨越迷宫中的墙);公主柔弱,一次只能走一步。问在这个迷宫中,蒜头君是否可以救出公主(蒜头君和公主相遇后,就能背着公主逃出迷宫了)。
输入格式
第一行输入两个整数 n(1≤n≤100), m(1≤m≤100) 表示迷宫的行和列。
然后有一个 n×m 的地图,地图由’.’、’#’、‘w’、‘g’这四个部分组成。’.‘表示可以通行的路,’#'表示迷宫的墙,'w’表示王子开始所在的位置,'g’表示公主开始所在的位置。
输出格式
输出王子是不可以救出自己的公主,如果能救出则输出"yes",否则输出"no"。
样例输入
1 8
w….#.g
样例输出
yes

思路:

标记vis建立为三维,一维存王子(d=0),一维存公主(d=1),(回溯时不将vis清零)若存在重合点就说明可以相遇。

好处可以两个通用一个dfs函数,当d=0时,步长为2-d也就是2,为王子;当d=1时,步长为2-d也就是1,为公主。

n,m=map(int,input().split())
maze=[]
for i in range(n):list1=list(input())maze.append(list1)
vis=[[[0]*2 for i in range(m)] for j in range(n)]
#print(vis)
def dfs(x,y,d):#目的就是改变vis的值,所以没有return也可以vis[x][y][d] = 1#for dx,dy in [(2-d,0),(-2+d,0),(0,2-d),(0,-2+d)]:nx=dx+xny=dy+yif 0<=nx<n and 0<=ny<m and vis[nx][ny][d]!=1 and maze[nx][ny]!='#':#vis[x][y][d] = 1  放这里最后一步的vis更新dfs(nx,ny,d)for i in range(n):for j in range(m):if maze[i][j]=='w':x=iy=j
#print(x,y)
dfs(x,y,0)
#print(vis)for i in range(n):for j in range(m):if maze[i][j]=='g':x=iy=j
#print(x,y)
dfs(x,y,1)
#print(vis)ans=False
for i in range(n):for j in range(m):if vis[i][j][0]==1 and vis[i][j][1]==1:ans=True
if ans:print('yes')
else:print('no')
n,m=map(int,input().split())
maze=[]
for i in range(n):list1=list(input())maze.append(list1)
vis=[[[0]*2 for i in range(m)] for j in range(n)]
#print(vis)
def dfs(x,y,d):if 0 > x or x>= n or 0 > y or y>= m or vis[x][y][d] == 1 or maze[x][y] == '#':returnvis[x][y][d] = 1#dfs(x+(2-d),y,d)dfs(x - (2 - d), y, d)dfs(x , y+ (2 - d), d)dfs(x , y- (2 - d), d)for i in range(n):for j in range(m):if maze[i][j]=='w':x=iy=j
#print(x,y)
dfs(x,y,0)
#print(vis)for i in range(n):for j in range(m):if maze[i][j]=='g':x=iy=j
#print(x,y)
dfs(x,y,1)
#print(vis)ans=False
for i in range(n):for j in range(m):if vis[i][j][0]==1 and vis[i][j][1]==1:ans=True
if ans:print('yes')
else:print('no')

【DFS题型九/双向DFS】王子救公主相关推荐

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

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

  2. DFS练习——王子救公主

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

  3. 计蒜客:王子救公主---dfs

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

  4. 王子救公主(DFS)

    样例输入 1 8 w....#.g 样例输出 yes 解题思路: 两次搜索: 1.第一次对王子进行搜索,标记王子能到达的所有点. 2.第二次对公主进行搜索,如果公主能到达王子标记过的点,那么说明王子可 ...

  5. 计蒜客 王子救公主 dfs

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

  6. 【DFS专题训练】王子救公主 C++程序题

    题目描述 王子走两步,公主走一步,遇到#不能走,他们能否碰上 输入 1 8 w-#.g 输出 yes 思路 王子深搜一次记录走过的地方,公主深搜一次记录走过的地方,如果都走过就返回yes #inclu ...

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

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

  8. 【深度优先搜索】计蒜客:王子救公主

    思路:用两次深度优先搜索,数组vis1标记王子可能到达的点,数组vis2标记公主可能到达的点: 如果两个数组有重复的标记的坐标,那么王子可以救出公主 !标记所有可能情况的深度优先搜索不需要回溯! 如果 ...

  9. “趣味”or“烧脑”算法 之 王子救公主

    | 题引 相信大部分人童年都玩过大富豪这样一类的棋,棋格上面有加多少分,减多少分等等设置,比赛最终谁的分值最多(类似下面这个棋盘) | 正题 设置小游戏为一个二维矩阵, 王子位于左上角,公主位于右下角 ...

最新文章

  1. JDK+TOMCAT在LINUX下简单的配置
  2. 数据结构-浙大 MOOC 笔记一 基本概念
  3. 如何在SQL SELECT中执行IF…THEN?
  4. 不同类的方法 事务问题_深入理解 Spring 事务原理
  5. 支持透明窗口显示的webbrowser_支持十点触控!LG推出新透明OLED显示屏
  6. Intellij IDEA2019项目包分层结构显示设置
  7. 【python】抄写大神的百度贴吧代码
  8. MyBatis-进阶2
  9. 锐捷(七)设备软件版本升级更新
  10. 刚刚!微软又放大招!让草稿几秒钟变App!
  11. 【光学】--色度学与Lab模型
  12. 购买Blender cloud支援今年官方开源电影Gooseberry
  13. 软件:分享六款实用的软件,每一款值得收藏
  14. MT6580电池电压ADC完全不对,最高达到4.7V
  15. CF1284E·New Year and Castle Construction
  16. Unity WEBGL设置浏览器全屏
  17. 微信小程序--自定义组件(超详细 从新建到使用)
  18. Spring是什么?干什么的?怎么用?
  19. 如何在wps ppt中播放gif动图
  20. 明明白白你的'芯'-8051中Rx与ARx概念简介

热门文章

  1. 关于Pillow与PIL
  2. 20多份软件测试报告模板(标准版)一份优秀测试报告模板流程
  3. 常见html的MIME类型
  4. ROS踩坑之.msg文件未能转化为.h文件
  5. 如何用EXCEL求一组数的方差…
  6. 完美世界手游服务器维护时间表,完美世界手游开服时间表 新区开服时间总览[多图]...
  7. 深圳大澳湾度假团建攻略
  8. 线性代数笔记21——伴随矩阵和克莱姆法则
  9. 批量注释基因到基因座上(map gene to locus)
  10. unity 适配iPhone X底部横条