分治法 馬的Hamilton周遊路線問題

2021-08-20 15:03:08 字數 1050 閱讀 5519

2、問題講解

在西洋棋中馬是走日字的,如果是一般情況馬一共有八種走法(如下圖)

所以我在這邊用2個一位陣列來表示其8種走法

//考慮到馬有8種走法

int dx[8]=;

int dy[8]=;

之後就讓馬根據這八種走法來走不過還要考慮下面3種情況

第一種情況

如果馬的下一步走法已經超出棋盤的範圍了那麼就不應該讓馬接下來走這一步轉而去考慮其他的走法

第二種情況

如果馬的下一步是已經走過的那麼就不應該讓馬接下來走這一步轉而去考慮其他的走法

第三種情況

如果馬能夠遍歷完棋盤,那麼就要考慮其最後一步是否可以通過上述的八種走法中的一種到達最開始的一步

#include #include #include using namespace std;

#define max 101

int count = 0;

int m,n;//棋盤大小

int start_x,start_y;//起點位置

//考慮到馬有8種走法

int dx[8]=;

int dy[8]=;

int board[max][max]=;

//輸出棋盤

void show(int m,int n){

for(int i = 0;i=0&&x=0&&y>m>>n;

cout>start_y;

int number = 1;

board[start_x][start_y] = number;//將起始位置為1

move(start_x,start_y,number+1);

cout<

馬的Hamilton周遊路線

8 8的西洋棋棋盤上的乙隻馬,恰好走過除起點外的其他63個位置各一次,最後回到起點,這條路線稱為馬的一條hamilton周遊路線。對於給定的m n的西洋棋棋盤,m和n均為大於5的偶數,且 m n 2,試設計乙個分治演算法找出馬的一條hamilton周遊路線。include include defin...

sicily 1153 馬的周遊問題

time limit 1 secs,memory limit 32 mb special judge 和題目c同樣的任務,這裡只是把棋盤擴大到標準的西洋棋。對這樣乙個8 8的棋盤用同樣的方法編號如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...

馬的走法 SDUT

time limit 1000ms memory limit 65536k 有疑問?點這裡 在乙個4 5的棋盤上,馬的初始位置座標 縱 橫 位置由鍵盤輸入,求馬能返回初始位置的所有不同走法的總數 馬走過的位置不能重複,馬走 日 字 如果馬的初始位置座標超過棋盤的邊界,則輸出error。例如初始位置為...