鱼C论坛

 找回密码
 立即注册
查看: 999|回复: 8

迷宫问题

[复制链接]
发表于 2018-9-25 13:31:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
迷宫问题,PYTHON 小学生不会写,求大佬帮忙。要用python写。

迷宫.zip

91.18 KB, 下载次数: 13

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-25 14:26:06 | 显示全部楼层
呃,是这个迷宫路径的问题吗?
https://fishc.com.cn/thread-122768-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-25 19:30:51 | 显示全部楼层
RIXO 发表于 2018-9-25 14:26
呃,是这个迷宫路径的问题吗?
https://fishc.com.cn/thread-122768-1-1.html

不是,

                               
登录/注册后可看大图

第一问,这个迷宫又几个门
第二问,这个迷宫有多少个连在一块的墙
第三问,有几个不可以进入的区域
第四问,有几个可以进入的区域
第五问,有几个死胡同
第六问,有几个没有交叉,没有死胡同的通路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-25 19:32:32 | 显示全部楼层
本帖最后由 Bella666 于 2018-9-25 19:33 编辑

求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-25 20:28:30 | 显示全部楼层

英文文档看的我一脸懵逼,这谁出的题,太缺德了
呃,因为没学过算法,可能有点问题,按我的思路来讲
就是一个点,有四个方向,上下左右可以移动,点 = 0 四个方向都能移,点 = 1 不能移动上,点 = 2 不能移动右,点 = 3 不能移动上 左 。
呃,这样一来就等于扩展矩阵,矩阵的数量乘四倍
1 = 1  1       2   =  0   1       3    =   1    1   
      0  0                0   1                  1    0
移动方向  mov(x,y) =   左(1,0)上(0,1)右(-1,0)下(0,-1)
找路的话需要先遍历四个边,边有没有0存在,然后逐个计算有没有出路
这个应该是题目里面的门,关于不可进入区域,和可以进入区域,还不清楚是啥
死胡同就是走不通的路径,按照帖子里面的求解可以求出来
通路也能算出来
如此一考虑,这已经是200行代码以上才能做的事情
构建扩展出来的那个矩阵还没想好怎么实现。。。。。
这题难度太大了,放弃吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-25 20:38:01 | 显示全部楼层
RIXO 发表于 2018-9-25 20:28
英文文档看的我一脸懵逼,这谁出的题,太缺德了
呃,因为没学过算法,可能有点问题,按我的思 ...

可进入区域就是有入口,不可进入区域就是周围全是墙。
谢谢,大佬解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-25 21:09:06 | 显示全部楼层
要叫这位大佬来解@冬雪雪冬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-26 14:56:57 | 显示全部楼层
  1. maze = [
  2. [1,1,1,1,1,1,1,1,1,1],
  3. [1,0,0,1,0,0,0,1,0,1],
  4. [1,0,0,1,0,0,0,1,0,1],
  5. [1,0,0,0,0,1,1,0,0,1],
  6. [1,0,1,1,1,0,0,0,0,1],
  7. [1,0,0,0,1,0,0,0,0,1],
  8. [1,0,1,0,0,0,1,0,0,1],
  9. [1,0,1,1,1,0,1,1,0,1],
  10. [1,1,0,0,0,0,0,1,0,1],
  11. [1,1,1,1,1,1,1,1,1,1]
  12. ]

  13. dirs = [
  14.     lambda x, y: (x + 1, y),
  15.     lambda x, y: (x - 1, y),
  16.     lambda x, y: (x, y + 1),
  17.     lambda x, y: (x, y - 1),
  18.     ]
  19. from collections import deque
  20. def maze_find(x1, y1, x2, y2):
  21.     stack = deque()
  22.     stack.append((x1, y1))
  23.     while len(stack) > 0:
  24.         curNode = stack[-1]
  25.         if curNode[0] == x2 and curNode[1] == y2:
  26.             for p in stack:
  27.                 print(p)
  28.             return True
  29.         for i in dirs:
  30.             nextNode = i(*curNode)
  31.             if maze[nextNode[0]][nextNode[1]] == 0:
  32.                 stack.append(nextNode)
  33.                 maze[nextNode[0]][nextNode[1]] = -1
  34.                 break
  35.         else:
  36.             maze[curNode[0]][curNode[1]] = -1
  37.             stack.pop()
  38.     print('没有找到出口')
  39.     return False

  40. #maze_find(1, 1, 8, 8)

  41. def r_path(path):
  42.     curNode = path.pop()
  43.     rpath = []
  44.     while curNode[2] != -1:
  45.         rpath.append((curNode[0:2]))
  46.         curNode = path[curNode[2]]
  47.     return reversed(rpath)

  48. def maze_q(x1, y1, x2, y2):
  49.     stack = deque()#建立一个队列
  50.     stack.append((x1, y1, -1))#初始化第一个起点
  51.     rpath = [] #结果路径
  52.     while len(stack) > 0: #当有队列存在循环
  53.         curNode = stack.popleft()#当前队列的第一个位置为当前位置
  54.         rpath.append(curNode)
  55.         for i in dirs:
  56.             nextNode = i(curNode[0], curNode[1])
  57.             #print(nextNode)
  58.             if nextNode[0] == x2 and nextNode[1] == y2:
  59.                 print('开始走迷宫:')
  60.                 print('起点位置:', (x1, y1))
  61.                 for i in r_path(rpath):
  62.                     print('途径位置:', i)
  63.                 print('终点位置:', (x2, y2))
  64.                 return True
  65.             if maze[nextNode[0]][nextNode[1]] == 0:
  66.                 stack.append((nextNode[0], nextNode[1], len(rpath)-1))
  67.                 maze[nextNode[0]][nextNode[1]] = -1
  68.     print('没有找到出口')
  69.     return False
  70. maze_q(1, 1, 8, 8)
复制代码

给你看一下我之前写的迷宫代码,基本上的思路就是先确定可以走的方向上下左右,然后每次走玩判断是不是到达终点,并记录该点已经走过。因为题目是全英文的,实在是看的头大。。。所以发一下自己之前写的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-5 23:32:24 | 显示全部楼层
colinshi 发表于 2018-9-26 14:56
给你看一下我之前写的迷宫代码,基本上的思路就是先确定可以走的方向上下左右,然后每次走玩判断是不是到 ...

谢谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 23:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表