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的二维数组,很花了点时间,下一节再说。
  • 相关阅读:
    solr schema.xml配置
    solrconfig.xml配置文件
    solr 使用edismax来控制评分
    solr 打分和排序机制(转载)
    VMware vCenter Converter Standalone使用,物理机转换虚拟机
    Windows server开机登录取消按ctrl+alt+delete组合键
    pycharm专业版2020.1.1版本最新亲测激活,其他版本也复用
    jmeter服务器监控和插件管理
    windows下安装navicat15破解,详解最全
    linux解压汉字文件是乱码
  • 原文地址:https://www.cnblogs.com/81/p/738659.html
Copyright © 2011-2022 走看看