騎士遍歷問題

2021-06-22 05:07:45 字數 575 閱讀 5200

問題描述:在8*8方格的棋盤上,從任意指定的方格出發,為象棋中的馬尋找一條走遍棋盤每一格並且只經過一次的一條路徑(馬走「日」字)。

1、馬有8個方向可以行走,因此把八個方向用陣列儲存起來;

2、在主函式中,對每乙個方格作為起點對整個棋盤進行回溯遍歷;

3、在回溯過程中,要注意每一層的結尾對資料進行復原。

以下就是我按照這個思路寫的演算法,但是對於8*8的棋盤來說,效率極低!(對5*5的棋盤速度還算可以)。

#include #include #include using namespace std;

#define maxlen 8

int num;

bool flag[maxlen][maxlen];

int maxnum=maxlen*maxlen;

int dir[8][2]=;

void dfs_search(int i,int j,int &count) }}

int main(){

int count;

num=0;

for(int i=0;i

有知道最優解的朋友可以跟我討論下哈,謝謝啦!

騎士旅行問題(騎士走棋盤)

問題描述 乙個騎士在棋盤中,給予其乙個初始位置,求其是否能夠走完整個棋盤。騎士的走法和中國象棋的馬走法相同,在前進過程中,騎士在其落足過的地方不能再次落足。如下 騎士走棋盤問題,騎士的走法與象棋中馬的走法相同,要求騎士便利棋盤中所有的點,但不能重複走乙個點兩次 本題採用優先選擇 回溯到方法進行,每次...

騎士周遊問題

問題 給定乙個n n的棋盤,乙個馬從任意位置出發,按照馬移動的規則,在不重複走任意乙個點的前提下走完所有點,即跳n n步以後需要遍歷了整個棋盤。思路 首先就是暴力搜尋,dfs 回溯。include include include using namespace std const int n 8 棋...

騎士周遊問題

問題 給定乙個n n的棋盤,乙個馬從任意位置出發,按照馬移動的規則,在不重複走任意乙個點的前提下走完所有點,即跳nxn步以後需要遍歷了整個棋盤。思路 首先就是暴力搜尋,dfs 回溯。include include include using namespace std const int n 8 棋...