馬的遍曆(Python版)

來源:互聯網
上載者:User
五一假日閑來無事,學習了下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的二維數組,很花了點時間,下一節再說。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.