回覆列表
  • 1 # 使用者774056550451

    國際象棋中,馬按規則從任一點開始將所有格跳過一次(不重複)。我的演算法分析如下:國際象棋馬的走法:先直走或橫走一格,再沿離開原來格子的方向斜走一個,合起來為一步棋;國際象棋棋盤黑白交錯,格數8×8,根據馬的走法,它只能從白格走向黑格,再從黑格走向白格,與此類推。格子具有集合性,故考慮使用無向圖來表示格子及其間關係;以鄰接表作為該無向圖中結點與相鄰8個結點(4黑4白)的儲存結構;以頂點表儲存格子,每格為頂點表中一結點,其指標域有二,左指標連結黑格鄰接表,右指標連結白格鄰接表,其結點域為訪問標識,訪問過則為1,未訪問為0;如用c實現,頂點表的頭結點(下標為0的陣列元素)不用,用來標識每一步的訪問方向(先黑後黑或者先白後白)。(b=black,w=white)b1 w1 b2 w2w3 b3 w4 b4b5 w5 b6 w6w7 b8 w8 b8以b3為頂點,得頂點表與鄰接表片斷如下...b6;w1-->;w3-->;w4-->;w5...採用圖的深度遍歷演算法,以方向標識的取值作為約束條件,每兩個半步置值(0/1),以訪問標識作為是否訪問該結點或跳至下一結點的判斷條件,訪問所有的結點(可加一計數因子或直接在頭頂點開多一域來計數)。這樣便可得到遍歷的一條途徑。如想得到所有可能的途徑,可以在這個演算法基礎上加以擴充套件。

  • 中秋節和大豐收的關聯?
  • oppoA57型號手機怎樣刷機解鎖?