馬的遍歷 搜尋與回溯

2022-05-13 04:20:49 字數 1344 閱讀 8207

題目描述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 2

int 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 的二維陣列記錄馬行走的過程,初值...