題目描述description
中國象棋半張棋盤如圖所示。馬自左下角往右上角跳。今規定只許往右跳,不許往左跳。比如圖4(a)中所示為一種跳行路線,並將所經路線列印出來。
輸入輸出格式input/output
輸入格式:
無輸出格式:
第一行:乙個整數total表示第幾種跳法
第二行:0,0-->2,1-->3,3-->1,4-->3,5-->2,7-->4,8
輸入輸出樣例sample input/output
樣例測試點#1
輸入樣例:
無輸出樣例:
1
0,0-->2,1-->3,3-->1,4-->3,5-->2,7-->4,8…
【演算法分析】
如圖4(b),馬最多有四個方向,若原來的橫座標為j、縱座標為i,則四個方向的移動可表示為:
1: (i,j)→(i+2,j+1); (i<3,j<8)
2: (i,j)→(i+1,j+2); (i<4,j<7)
3: (i,j)→(i-1,j+2); (i>0,j<7)
4: (i,j)→(i-2,j+1); (i>1,j<8)
搜尋策略:
s1:a[1]:=(0,0);
s3:列印路徑。
思路:可以用乙個陣列存路徑,迴圈四次(四種移動規則)
判斷條件是否成立(是否在格仔內)
成立,儲存當前馬的位置,再判斷是否跳到頭了,是就輸出(傳入輸出函式),反之則繼續尋找
**如下:
1 #include 2int a[100][100],total=0;//
路徑總數和路徑
3int x[4]=,y[4]=;//
四種移動規則
4int print(int
ii)5
13 printf("
4,8\n");
14}15int search(int
i)1627}
28}29int
main()
30
C 搜尋與回溯演算法之馬走日 遍歷問題
馬在中國象棋以日字形規則移動。請編寫一段程式,給定n m大小的棋盤,以及馬的初始位置 x,y 要求不能重複經過棋盤上的同乙個點,計算馬可以有多少途徑遍歷棋盤上的所有點。第一行為整數t t 10 表示測試資料組數。每一組測試資料報含一行,為四個整數,分別為棋盤的大小以及初始位置座標n,m,x,y。0 ...
回溯,深度遍歷 單詞搜尋
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。board a b c e s f c s a d e e 給定 word abcced 返回 true 給定 word see 返回 true 給定 wor...
馬的遍歷問題 回溯法應用 ACM
馬的遍歷問題 在n m 的棋盤中,馬只能走 日 字。馬從位置 x,y 處出發,把棋盤的每一格都走一次,且只走一次。找出所有路徑。問題解的搜尋空間?棋盤的規模是 n m,是指行有 n條邊,列有 m條邊。馬在棋盤的點上走,所以搜尋空間是整個棋盤上的 n m個點。用n m 的二維陣列記錄馬行走的過程,初值...