馬的遍歷問題
在n*m問題解的搜尋空間?的棋盤中,馬只能走「日」 字。馬從位置
(x,y
)處出發,把棋盤的每一格都走一次,且只走一次。找出所有路徑。
棋盤的規模是在尋找路徑過程中,活結點的擴充套件規則?n*m,是指行有
n條邊,列有
m條邊。
馬在棋盤的點上走,所以搜尋空間是整個棋盤上的
n*m個點。
用n*m
的二維陣列記錄馬行走的過程,初值為
0表示未經過。
對於棋盤上任意一點擴充套件的約束條件a(x,y
),有八個擴充套件方向:
a(x+1,y+2),a(x+2,y+1)
a(x+2,y-1),a(x+1,y-2)
a(x-1,y-2),a(x-2,y-1)
a(x-2,y+1),a(x-1,y+2)
為構造迴圈體,用陣列
fx[8]=,
fy[8]=
來模擬馬走「日」時下標的變化過程。
不出邊界輸入;每個點只經過一次。
棋盤點對應的陣列元素初值為
0,對走過的棋盤點的值置為
所走步數
,起點儲存「
1」,終點儲存「
n*m」。函式
check
,檢查當前狀態是否合理
0 0輸出
1 90 82 75 88 83 78 85 8971 74 2 64 81 76 87 84 79
44 55 72 69 3 63 80 77 86
73 70 45 56 65 68 4 62 59
54 43 66 51 46 57 60 49 5
41 37 53 31 67 50 47 58 61
35 12 42 38 52 30 25 6 48
20 39 36 13 32 23 16 29 26
11 34 21 18 9 14 27 24 7
40 19 10 33 22 17 8 15 28
#include #include int matrix[10][9];int journey = 1;
int step_x=,step_y=;
void outmatrix()
printf("\n"); }}
bool outofbounds(int x,int y)
bool iscome(int x,int y)
void gotoend(int x, int y ) }}
int main()
gotoend(start_x,start_y);
outmatrix();
return 0;
}
馬踏棋盤(關於回溯法的應用)
問題描述 在中國象棋中,棋子馬的走法是走 日 字型 現有一8 8的中國象棋棋盤,棋子馬從任意給定一點出發,走 日 字型,要求為馬 尋找一條走遍棋盤每一格並且只經過一次的一條路徑。給定乙個初始的座標,如 0,0 從該點向外走 日 字型,有兩種走法,若起始點 在 4,4 棋子的每個方向都可以走,有八種走...
回溯法解決馬步遍歷問題
設計一演算法,求解西洋棋中的馬的周遊問題 給定一8 8的棋盤,馬從棋盤的某個位置出發,經過棋盤中的每乙個方格恰好一次。只需求一可行解 一 演算法思想描述 指定乙個起點座標,從起點開始對每個點遍歷其能到達的八方向上的點,如果可以踩則走到該結點上,並繼續深入遍歷,直到最後走完所有的結點。二 完整的程式以...
馬的遍歷 搜尋與回溯
題目描述description 中國象棋半張棋盤如圖所示。馬自左下角往右上角跳。今規定只許往右跳,不許往左跳。比如圖4 a 中所示為一種跳行路線,並將所經路線列印出來。輸入輸出格式input output 輸入格式 無輸出格式 第一行 乙個整數total表示第幾種跳法 第二行 0,0 2,1 3,3...