Python学习笔记02----M*N的棋盘,马从坐下到右上的行走方式
题目:
下过象棋的人都知道,马只能走'日'字形(包括旋转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的棋盘,马从坐下到右上的行走方式相关推荐
- python学习笔记02
python学习笔记02 面向对象Object Oriented 概述 类和对象 封装 继承 多态 类与类的关系 设计原则 总结 python学习笔记03 面向对象Object Oriented 概述 ...
- python 学习笔记 02
学习笔记 1. 太阳光的组成 太阳光由七种颜色组成,分别为 红橙黄绿蓝靛紫.雨后彩虹 就是很好的体现. 红色(red),橙色(orange), 黄色(yellow),绿色(green), 蓝色(blu ...
- python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名
Python_Pandas学习笔记02:DataFrame获取列名和修改列名 Python_Pandas学习笔记02:DataFrame获取列名和修改列名 一.参考资料 [1].?Pandas获取列名 ...
- Python学习笔记:第三方模块2
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用内建模块6 (urllib)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- openCVPracticalExercise学习笔记02
原创:openCVPracticalExercise学习笔记02 10使用Hu矩进行形状匹配 Hu矩(或者更确切地说是Hu矩不变量)是使用对图像变换不变的中心矩计算的一组7个变量.事实证明,前6个矩不 ...
- django学习笔记02
原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...
- 金融民工python学习笔记
金融民工python学习笔记 #仅用于个人python学习的记录,便于查看和复习 利用pandas_datareader获取股票信息 参考链接:https://www.jianshu.com/p/63 ...
- Python学习笔记五:控制语句
Python学习笔记五:控制语句 Pycharm 开发环境的下载安装配置_项目管理 控制语句 Pycharm 开发环境的使用 Pycharm 下载和安装 激活和选择不同UI 风格 创建项目和初始化配置 ...
最新文章
- RocketMQ 基本概念
- 面试官:Spring AOP、AspectJ、CGLIB 都是什么鬼?它们有什么关系?
- android学习从模仿开始 —— 模仿UI 导航帖
- 上海大学c语言基础题目,求c语言大神学长学姐解答题目
- 第十七单元 Samba服务
- XAPIAN简单介绍(三)
- 实验室机器OracleXE客户端连接远程Oracle服务器
- Eclipse Java类编辑器里出现乱码的解决方案
- SQLmap的下载和安装,以及其参数大全和使用教程(值得收藏)
- windows下GitHub的SSH Key 配置
- NLP纠错 | 恶意短信变体字还原、鲁棒性过滤与文本纠错竞赛概述与简单变体实现...
- RPC框架dubbo架构原理及使用说明
- 计算机教育部 学科分类,教育部学科分类及代码分类查询.pdf
- 电阻温度系数、电阻精度对电阻分压采样电压的影响
- html在excel中查询,excel通配符查找 excel任意字母的通配符
- 解读《三字经》(7)
- 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
- Java后端根据身份证号获取年龄
- 贪心算法训练(七)——加工生产调度(流水作业调度问题)
- 我的图床解决方案,超详细!
热门文章
- 在PhotoShop中修正相机图片将梯形变成长方形
- 读书笔记-精准努力-出身寒门改变命运
- PCB原理图绘制(7)——PCB的设置与布线
- 使用USB 3G上网卡+树莓派搭建接受短信自动转发邮箱的服务
- javaWeb与Spring学习小结
- 超级App成为Gartner预测的战略技术,软件降本增效是否能进一步提速?
- 电脑无法打开网页,但可以使用客户端软件如何解决?
- mysql统计数量函数方法_mySql关于统计数量的SQL查询操作
- proteus仿真控制电机正转、反转和停止转动
- linux3.5 usb键盘,CRUX 3.5发布下载,一款轻量级且为i686优化的Linux发行版