牛客python刷题笔记——python二维数组——迷宫题目

首先补充上一篇博客对于获取输入的遗漏点,即每行的输入是固定数目的数字时,可以用:

while True:
    try:
        (x, y) = (int(x) for x in raw_input().split())
        print x + y
    except EOFError:
        break

最近刷题看到了一题,是假设一个探险家被困在了地底的迷宫之中,要从当前位置开始找到一条通往迷宫出口的路径。迷宫可以用一个二维矩阵组成,有的部分是墙,有的部分是路。迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与之匹配的钥匙,只有先拿到钥匙才能打开门。请设计一个算法,帮助探险家找到脱困的最短路径。如前所述,迷宫是通过一个二维矩阵表示的,每个元素的值的含义如下 0-墙,1-路,2-探险家的起始位置,3-迷宫的出口,大写字母-门,小写字母-对应大写字母所代表的门的钥匙
当时毫无头绪,只得参考答案寻找思路,结果发现牛客上并没有人用python做= =尴尬:
首先找python生成二维列表的方法:

 lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]

那么首先生成迷宫对应的二维数组,并保存初始点位置

import sys

State s=new State();
line = sys.stdin.readline().strip()
if line=='':
    print("0")
m=list(map(int, line.split()))
lists = [[] for i in range(m[0])]
for i in range(m[0]):
    nums = sys.stdin.readline().strip().split()
    for j in range(m[1]):
        if nums[j]==2:
            s.setstate(i,j)
        lists[i].append(nums[j])
solution(lists,s,m[0],m[1])

定义位置类

class State(object):
    def __init__(self):
        self.px=0
        self.py=0
        self.keys = 0
        self.step = 0
    def setstate(x,y):
        self.px=x
        self.py=y

函数:


def solution(lists,s,m[0],m[1])
    。。。懒癌犯了还是给出地址吧https://www.nowcoder.com/test/question/done?tid=16851845&qid=111152#summary

你可能感兴趣的:(刷题笔记)