题目:

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

#寻找下一步左右可能的点
def goNextStep(currentP,n,m):result=[]x=currentP[0]y=currentP[1]#分析理论8种情况if x+1<=n and y+2<=m:result.append([x+1,y+2])if x+1<=n and y-2>=0:result.append([x+1,y-2])if x+2<=n and y-1>=0:result.append([x+2,y-1])if x+2<=n and y+1<=m:result.append([x+2,y+1])if x-1>=0 and y+2<=m:result.append([x-1,y+2])if x-1>=0 and y-2>=0:result.append([x-1,y-2])if x-2>=0 and y-1>=0:result.append([x-2,y-1])if x-2>=0 and y+1<=m:result.append([x-2,y+1])return result#获取下一步之后所有的路径点
def getAllPath(n,m,pathArr):allPathArrNew=[]for path in pathArr:nextWay1=goNextStep(path[len(path)-1],n,m)for point in nextWay1:#不走回头路if path.count(point)==0:newPath=list(path)newPath.append(point)allPathArrNew.append(newPath)return allPathArrNew#找出所有最短路径  若没有则返回最终无法行走的路径
def findShortestPath(n,m):#第一步stepFinal=[[[0,0]]]#最佳路径数组bestPath=[]while True:stepNext=getAllPath(n,m,stepFinal)#无路可走则跳出if(len(stepNext)==0) :break#记录此步stepFinal=stepNext#某一条路到终点则记录for path in stepNext:lastPoint=path[len(path)-1]if lastPoint[0]==n and lastPoint[1]==m:bestPath.append(path)#存在到达终点的路径则跳出if len(bestPath)>0:break return bestPath if len(bestPath)!=0 else stepFinal#找出最短路径的步数 若无法到达则返回-1
def findShortestPathStepCount(n,m):#第一步stepFinal=[[[0,0]]]#最佳路径数组bestPath=[]while True:stepNext=getAllPath(n,m,stepFinal)#无路可走则跳出if(len(stepNext)==0) :break#记录此步stepFinal=stepNext#某一条路到终点则记录for path in stepNext:lastPoint=path[len(path)-1]if lastPoint[0]==n and lastPoint[1]==m:bestPath.append(path)#存在到达终点的路径则跳出if len(bestPath)>0:break return len(bestPath[0])-1 if len(bestPath)!=0 else -1

Python学习笔记02----M*N的棋盘,马从坐下到右上的行走方式相关推荐

  1. python学习笔记02

    python学习笔记02 面向对象Object Oriented 概述 类和对象 封装 继承 多态 类与类的关系 设计原则 总结 python学习笔记03 面向对象Object Oriented 概述 ...

  2. python 学习笔记 02

    学习笔记 1. 太阳光的组成 太阳光由七种颜色组成,分别为 红橙黄绿蓝靛紫.雨后彩虹 就是很好的体现. 红色(red),橙色(orange), 黄色(yellow),绿色(green), 蓝色(blu ...

  3. python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名

    Python_Pandas学习笔记02:DataFrame获取列名和修改列名 Python_Pandas学习笔记02:DataFrame获取列名和修改列名 一.参考资料 [1].?Pandas获取列名 ...

  4. Python学习笔记:第三方模块2

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. Python学习笔记:常用内建模块6 (urllib)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. openCVPracticalExercise学习笔记02

    原创:openCVPracticalExercise学习笔记02 10使用Hu矩进行形状匹配 Hu矩(或者更确切地说是Hu矩不变量)是使用对图像变换不变的中心矩计算的一组7个变量.事实证明,前6个矩不 ...

  7. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  8. 金融民工python学习笔记

    金融民工python学习笔记 #仅用于个人python学习的记录,便于查看和复习 利用pandas_datareader获取股票信息 参考链接:https://www.jianshu.com/p/63 ...

  9. Python学习笔记五:控制语句

    Python学习笔记五:控制语句 Pycharm 开发环境的下载安装配置_项目管理 控制语句 Pycharm 开发环境的使用 Pycharm 下载和安装 激活和选择不同UI 风格 创建项目和初始化配置 ...

最新文章

  1. RocketMQ 基本概念
  2. 面试官:Spring AOP、AspectJ、CGLIB 都是什么鬼?它们有什么关系?
  3. android学习从模仿开始 —— 模仿UI 导航帖
  4. 上海大学c语言基础题目,求c语言大神学长学姐解答题目
  5. 第十七单元 Samba服务
  6. XAPIAN简单介绍(三)
  7. 实验室机器OracleXE客户端连接远程Oracle服务器
  8. Eclipse Java类编辑器里出现乱码的解决方案
  9. SQLmap的下载和安装,以及其参数大全和使用教程(值得收藏)
  10. windows下GitHub的SSH Key 配置
  11. NLP纠错 | 恶意短信变体字还原、鲁棒性过滤与文本纠错竞赛概述与简单变体实现...
  12. RPC框架dubbo架构原理及使用说明
  13. 计算机教育部 学科分类,教育部学科分类及代码分类查询.pdf
  14. 电阻温度系数、电阻精度对电阻分压采样电压的影响
  15. html在excel中查询,excel通配符查找 excel任意字母的通配符
  16. 解读《三字经》(7)
  17. 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
  18. Java后端根据身份证号获取年龄
  19. 贪心算法训练(七)——加工生产调度(流水作业调度问题)
  20. 我的图床解决方案,超详细!

热门文章

  1. 在PhotoShop中修正相机图片将梯形变成长方形
  2. 读书笔记-精准努力-出身寒门改变命运
  3. PCB原理图绘制(7)——PCB的设置与布线
  4. 使用USB 3G上网卡+树莓派搭建接受短信自动转发邮箱的服务
  5. javaWeb与Spring学习小结
  6. 超级App成为Gartner预测的战略技术,软件降本增效是否能进一步提速?
  7. 电脑无法打开网页,但可以使用客户端软件如何解决?
  8. mysql统计数量函数方法_mySql关于统计数量的SQL查询操作
  9. proteus仿真控制电机正转、反转和停止转动
  10. linux3.5 usb键盘,CRUX 3.5发布下载,一款轻量级且为i686优化的Linux发行版