zoukankan      html  css  js  c++  java
  • 马的遍历(Python版)

    五一假日闲来无事,学习了下Python,用马的遍历算法作为这几天学习的总结:

    上述代码在A=8时,即8*8的棋盘大小,从(0,0)开始时count = 16501401费时359.331413 秒(Python2.51)
    在IronPython 2 a中运行是300秒,速度稍快一点。
    #coding=utf-8
    #
    马的遍历算法
    import time, sys

    class hourse:
        
    def __init__(self, A = 6):
            self.zf 
    = [[1,2],[2,1],[2,-1],[1,-2],[-1,-2],[-2,-1],[-2,1],[-1,2]]
            self.A 
    = A
                                                
    #zf为马的八种走法
            print 'A = %d' % self.A
            self.X 
    = [[0   for   a   in   range(self.A)]   for   b   in   range(self.A)]
            self.finish 
    = [[0,0,-1]]                         #已完成的,这是入口
            self.X[0][0] = 1
                                                
        
    def next(self, cur_zf):
            
    if cur_zf[2>= 7 :
                
    return  None 
            cur_zf[
    2= cur_zf[2+ 1               #下一个可行的路线
            m = cur_zf[0] + self.zf[cur_zf[2]][0]        #下一个可行路线的m坐标值
            n = cur_zf[1+ self.zf[cur_zf[2]][1]        #下一个可行路线的n坐标值
            if m < 0 or m >= self.A or n < 0 or n >= self.A or self.X[m][n] != 0:
                
    return self.next(cur_zf)                 #如果超出了棋盘的大小,则取下一个走法 
            else:
                
    #print [m, n, -1]
                return [m, n, -1]

        
    def run(self):
            start 
    = time.clock()
            count 
    = 0
            
    while True:
                count 
    = count + 1
                last 
    = self.finish[-1]
                node 
    = self.next(last)
                
    if node == None:
                    self.X[last[0]][last[
    1]] = 0              #未使用
                    self.finish.pop()
                    
    #print 'pop',last
                    if len(self.finish) <= 0:
                        
    print 'over'
                        
    break
                
    else:
                    self.X[node[0]][node[
    1]] = 1              #已使用
                    self.finish.append(node)
                    
    #print 'append',node
                    if len(self.finish) == self.A * self.A:
                        
    print 'ok'
                        
    print self.finish
                        
    break

            
    print 'count = %d' % count
            
    print '费时%f秒' % (time.clock() - start)


    if __name__ == '__main__':
        
    if len(sys.argv) == 2:
            x 
    = hourse(int(sys.argv[1]))
        
    else:
            x 
    = hourse()
        x.run()
        
        

    另:在本代码中,为了定义一个初始为0的二维数组,很花了点时间,下一节再说。
  • 相关阅读:
    Java 多个线程之间共享数据
    Mysql索引为什么要采用B+Tree而非B-Tree
    MyBatis常见面试题:通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
    CentOS 8.1 基于二进制安装docker
    shell实现一键证书申请和颁发脚本
    配置DNS的主从以及实现域名反向解析
    利用Dockerfile实现nginx的部署
    编译安装Mariadb-10.5.5
    登录mysql出错:mysql: error while loading shared libraries: libtinfo.so.5: cannot open share
    一键安装MySQL5.7脚本
  • 原文地址:https://www.cnblogs.com/81/p/738659.html
Copyright © 2011-2022 走看看