zoukankan      html  css  js  c++  java
  • PythonTip--一马当先--bfs

    刚学python,小试牛刀

    一马当先 
    讨论此题 | 解题报告 
     (AC/Submit)Ratio(477|1829)26.08% 

    描述:
    下过象棋的人都知道,马只能走'日'字形(包括旋转90°的日),现在想象一下,给你一个n行m列网格棋盘,
    棋盘的左下角有一匹马,请你计算至少需要几步可以将它移动到棋盘的右上角,若无法走到,则输出-1.
    如n=1,m=2,则至少需要1步;若n=1,m=3,则输出-1。

    '''
    python的二维数组
    '''
    dx = [1,2,2,1,-1,-2,-2,-1]
    dy = [-2,-1,1,2,2,1,-1,-2]
    def bfs(n,m):
        vis = [ ([0]*(m+1))  for i in range(n+1)]
        q = [(0,0,0)]
        vis[0][0] = 1
        setp = 0xFFFFFFF
        while q:
            temp = q.pop(0)
            if temp[0] == n and temp[1] == m:
                if temp[2] < setp:
                    setp = temp[2]
            for x,y in zip(dx,dy):
                curx = temp[0] + x
                cury = temp[1] + y
                if curx>n or cury>m or curx<0 or cury<0 or vis[curx][cury]:
                    continue
                vis[curx][cury] = 1
                curstep = temp[2] + 1
                q.append((curx,cury,curstep))
        return -1 if setp == 0xFFFFFFF else setp
    
    print(bfs(n,m))
  • 相关阅读:
    kafka 常见面试题
    分布式-redis实现分布式锁
    java info信息中打印异常堆栈
    11.盛水最多的容器
    445.两数相加
    328. 奇偶链表
    7中join查询
    Linux基础学习05
    Linux基础学习04
    Linux基础学习03
  • 原文地址:https://www.cnblogs.com/langyao/p/7210693.html
Copyright © 2011-2022 走看看