python实现马踏棋盘优化算法(贪婪算法+迭代)
来源:互联网 发布:数据挖掘算法与应用 编辑:程序博客网 时间:2024/06/06 15:38
import time##棋盘长宽X = Y = 5##马可以选择走的步数STEP = 8##马可以选择走的方式nextList = [(2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1), (-2, -1), (-1, -2), (1, -2)] ##下左下逆时针##出发点startPoint=(2,0)##初始化棋盘chess=[[0 for j in range(Y)] for i in range(X)]##打印棋盘def printChess(): for i in range(X): print(chess[i]) print('over')##判断下一步是否可走def nextOk(point, i): nextp = (point[0] + nextList[i][0], point[1] + nextList[i][1]) if 0 <= nextp[0] < X and 0 <= nextp[1] < Y and chess[nextp[0]][nextp[1]] == 0: return True, nextp else: return False, point##获得下一步可走列表def findNext(point): list = [] for i in range(STEP): ok, pointn = nextOk(point, i) if ok: list.append(pointn) return list##获得步数最少的下一步(贪婪算法)def getBestNext(point, step): temp =X+1 best = (-1, -1) list = findNext(point) lenp = len(list) for i in range(lenp): n = len(findNext(list[i])) if n < temp: if n > 0: temp = n best = list[i] elif n == 0 and step == X * Y: best = list[i] return best##深度遍历 递归方式(速度很慢 对比方法)def traverse(point, count): global sum_count if count > X * Y: return True for i in range(STEP): ok, nextp = nextOk(point, i) if ok: chess[nextp[0]][nextp[1]] = count result = traverse(nextp, count + 1) if result: return True else: chess[nextp[0]][nextp[1]] = 0 return False##迭代方式 贪婪算法def traverseFast(point, step): chess[point[0]][point[1]] = step while 1: step += 1 best = getBestNext(point, step) if best[0] == -1: return step else: chess[best[0]][best[1]] = step point = best return step##测试递归方式def testSlow(): start = time.clock() chess[startPoint[0]][startPoint[1]]=1 ok = traverse(startPoint,2) if ok: print('遍历成功') else: print('遍历失败') printChess() print('user_time==', time.clock() - start)##测试贪婪算法def testFast(): start = time.clock() step = traverseFast(startPoint, 1) if step - 1 == X * Y: print('快速遍历成功') else: print('快速遍历失败') printChess() print('user_time==', time.clock() - start)if __name__ == '__main__':
testFast() chess = [[0 for j in range(Y)] for i in range(X)] testSlow()
10阶棋盘迭代的算法就算不出来了 贪婪算法还是很快
1 0
- python实现马踏棋盘优化算法(贪婪算法+迭代)
- 马踏棋盘C++实现与贪婪算法优化
- 贪婪算法 ---马踏棋盘
- 贪婪算法优化计算-马踏棋盘问题
- 马踏棋盘问题解决-利用深度搜索和贪婪算法优化
- 马踏棋盘算法 贪心算法优化
- 迭代优化算法
- 马踏棋盘之贪心算法优化
- 马踏棋盘:贪心算法java实现
- 马踏棋盘算法 Java实现
- 算法:马踏棋盘算法
- 马踏棋盘算法
- 马踏棋盘算法
- 马踏棋盘算法
- 马踏棋盘算法
- 马踏棋盘算法
- 马踏棋盘(贪婪法)
- 马踏棋盘问题(骑士周游问题)及其优化算法java实现
- JAVA进阶----ThreadPoolExecutor机制
- 设计模式之建造者模式
- mybatis使用resultMap实现一对多查询 (需求:查询订单以及订单明细)
- [LeetCode]Maximum Subarray
- js继承
- python实现马踏棋盘优化算法(贪婪算法+迭代)
- 使用 PHP 和 Apache Solr 实现企业搜索
- OpenCV学习笔记--第一个OpenCV程序:图片读写显示
- 搭建Hadoop前期配置---HADOOP系列(一)
- Thread的run()与start()的区别
- ubuntu 命令行模式和图形界面切换
- 【Linux】-- Could not get lock /var/lib/dpkg/lock 错误
- 卷积神经网络(CNN)防止过拟合的方法
- Oracle知识点连载(二)