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

2021-06-26 00:24:33 字數 1299 閱讀 2808

問題描述:乙個騎士在棋盤中,給予其乙個初始位置,求其是否能夠走完整個棋盤。

騎士的走法和中國象棋的馬走法相同,在前進過程中,騎士在其落足過的地方不能再次落足。

**如下:

//騎士走棋盤問題,騎士的走法與象棋中馬的走法相同,要求騎士便利棋盤中所有的點,但不能重複走乙個點兩次

//本題採用優先選擇+回溯到方法進行,每次最先選擇下一次能走路徑最少的點

#include using namespace std;

#define max_size 9

int nalreayvisit = 0;

int nchessboard[max_size][max_size]; //模擬棋盤狀況,0表示沒有被訪問過

int ktmove1[8] = ; //可訪問的各個點相對當前點位置

int ktmove2[8] = ;

//int narray

void printchessboard()

} return nret;

}bool knighttour(int nstartx, int nstarty)

//選取下乙個要訪問的點

int ncanvisit[max_size][2];

int ncannum = 0; //下一步可以走到選擇方法

int tempx,tempy;

int nnextway = 0;

int nextx, nexty; //下一步要走的座標

int nleastway = 9;

//選取下下步走法最少的路徑

for (int i = 0; i< 8; i++)

}} bool bflag = false;

if (ncannum == 0) //無法繼續走下去了

else

else

}} }

//遍歷完所有可走節點都無法完成

nalreayvisit--; //當前點訪問被撤銷

騎士旅行問題

西洋棋的騎士遍歷棋盤的所有格,利用試探性訪問求得結果。小弟愚笨,整了接近一上午才搞定,過程中實在太多基礎錯誤了,不過總算最後成功,得到能夠走完的所有格的初始點及路線。附加程式如下 new24.cpp 定義控制台應用程式的入口點。include stdafx.h include include inc...

騎士旅行 BFS

description 在乙個n m 格仔的棋盤上,有乙隻西洋棋的騎士在棋盤的左下角 1 1 如圖1 騎士只能根據象棋的規則進行移動,要麼橫向跳動一格縱向跳動兩格,要麼縱向跳動一格橫向跳動兩格。例如,n 4,m 3 時,若騎士在格仔 2 1 如圖2 則騎士只能移入下面格仔 1 3 3 3 或 4 2...

騎士旅行 bfs

題目描述 description 在乙個n m 格仔的棋盤上,有乙隻西洋棋的騎士在棋盤的左下角 1 1 如圖1 騎士只能根據象棋的規則進行移動,要麼橫向跳動一格縱向跳動兩格,要麼縱向跳動一格橫向跳動兩格。例如,n 4,m 3 時,若騎士在格仔 2 1 如圖2 則騎士只能移入下面格仔 1 3 3 3 ...