首先我在這裡用了乙個10*10的**而不是8*8的**。
為什麼這樣用呢?我主要考慮到了邊界問題,馬一共有8中踏出方式,
可是到了邊界時馬的踏出方式就變得很複雜要考慮踏出問題。所以我就用了10*10的
在出邊界時,只要判斷一下就可以了。
這裡有乙個問題,我想說下,馬是否踏到第64步?如果馬踏到第64步時,輸出,抹步數,返回第63步時,63步又進行踏出,迴圈判斷,又會回到剛剛踏到的第64步,如此迴圈,就會有問題。
解決方案:其實就是你在判斷是否能踏得時候,能踏得話,先count++。假入在第63步時,進入horse迴圈,此時r(行)和c(列)是即將要踏得第64步,能放進入,直接count++,滿64輸出。簡而言之,就是64不踏,在63步時進行判斷,輸出。
#include
#include
// 棋盤
int chess[12]
[12];
//統計馬一共有多少步
int num;
//馬走的方向
int move[8]
[2]=
,,,,
,,,}
;//統計馬一共有多少步
int count;
//輸出函式
void
print()
printf
("**************************\n");
}//馬走的方式
void
horse
(int x,
int y)
else}}
}int
main
(void)}
//馬的初始位置
chess[2]
[2]=
++count;
horse(2
,2);
//踏的全部方式
/* for(i=2; i<10; i++)
} */
}
回溯演算法之馬踏棋盤
問題描述 在8 8西洋棋棋盤上,讓馬從某一位置開始,走 日 子型踏遍棋盤每乙個格仔。演算法思想 採用回溯演算法,在每乙個點上按照一定順序探查下一步的走法,若走不動,則回溯到上一步,繼續探查 include define n 8 typedef struct move int chess n n in...
回溯演算法(馬踏棋盤)
近期學習了回溯演算法於是自己寫了馬踏棋盤的遞迴以及非遞迴方式的 theme 馬踏棋盤 回溯演算法 coder 秒針的聲音 time 2015.1.11 include include include define m 8 typedef struct nodehorse horse horse1 i...
回溯演算法(馬踏棋盤)
近期學習了回溯演算法於是自己寫了馬踏棋盤的遞迴以及非遞迴方式的 theme 馬踏棋盤 回溯演算法 coder 秒針的聲音 time 2015.1.11 include include include define m 8 typedef struct nodehorse horse horse1 i...