基礎演算法搜素與回溯之1219 馬走日

2021-10-04 11:17:48 字數 917 閱讀 1408

馬在中國象棋以日字形規則移動。

請編寫一段程式,給定n×m大小的棋盤,以及馬的初始位置(x,y),要求不能重複經過棋盤上的同乙個點,計算馬可以有多少途徑遍歷棋盤上的所有點。

第一行為整數t(t < 10),表示測試資料組數。

每一組測試資料報含一行,為四個整數,分別為棋盤的大小以及初始位置座標n,m,x,y。(0≤x≤n-1,0≤y≤m-1, m < 10, n < 10)。

每組測試資料報含一行,為乙個整數,表示馬能遍歷棋盤的途徑總數,0為無法遍歷一次。

15 4 0 0

《資訊學奧賽一本通》 基礎演算法搜素與回溯之1219:馬走日

#include

#include

#include

//使用其中的memset()函式

using

namespace std;

int m,n,num=

0,sep=1;

//m,n為長寬,num為總數,sep為步數

int a[8]

[2]=

,,,,

,,,}

;//馬走日乙個位置時共有八種走法

bool vis[10]

[10];

//標記走過的路

void

search

(int x,

int y)

;int

main()

return0;

}void

search

(int x,

int y)

}}

秀逗了,之前,判出條件進行迭代看誰沒有被走過,沒走過就不計次數,結果每次回溯都要判別一次棋盤,耗費計算資源極大。然後通過代入簡單的值發現,可以直接通過步數判出,恍然大明白呀!

回溯演算法之馬踏棋盤

問題描述 在8 8西洋棋棋盤上,讓馬從某一位置開始,走 日 子型踏遍棋盤每乙個格仔。演算法思想 採用回溯演算法,在每乙個點上按照一定順序探查下一步的走法,若走不動,則回溯到上一步,繼續探查 include define n 8 typedef struct move int chess n n in...

回溯演算法之馬踏棋盤

首先我在這裡用了乙個10 10的 而不是8 8的 為什麼這樣用呢?我主要考慮到了邊界問題,馬一共有8中踏出方式,可是到了邊界時馬的踏出方式就變得很複雜要考慮踏出問題。所以我就用了10 10的 在出邊界時,只要判斷一下就可以了。這裡有乙個問題,我想說下,馬是否踏到第64步?如果馬踏到第64步時,輸出,...

C 搜尋與回溯演算法之馬走日 遍歷問題

馬在中國象棋以日字形規則移動。請編寫一段程式,給定n m大小的棋盤,以及馬的初始位置 x,y 要求不能重複經過棋盤上的同乙個點,計算馬可以有多少途徑遍歷棋盤上的所有點。第一行為整數t t 10 表示測試資料組數。每一組測試資料報含一行,為四個整數,分別為棋盤的大小以及初始位置座標n,m,x,y。0 ...