問題描述:在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 棋...