騎士周遊問題

2021-08-30 06:43:23 字數 1013 閱讀 4853

問題

給定乙個n*n的棋盤,乙個馬從任意位置出發,按照馬移動的規則,在不重複走任意乙個點的前提下走完所有點,即跳nxn步以後需要遍歷了整個棋盤。

思路

首先就是暴力搜尋,dfs+回溯。

#include #include #include using namespace std;

const int n = 8;//棋盤的邊長

int chess[n][n];//標記

int move[8][2] = ,,,,,,, };

int backnum = 0;//回溯次數

int resultnum,resultcount=0;//想要的解的個數,當前解的個數

void showtrail();//輸出棋盤,顯示路徑

int main()

,,,,,,, };//移動方式

int backnum = 0;//記錄回溯次數

int resultnum,resultcount=0;//想要的解的個數,當前解的個數

struct next;

bool cmp( next a, next b ) );

}sort( v.begin(), v.end(), cmp );

for( int i=0; i=0&&x1=0&&y1=n||y<0||y>=n )

return inifite;

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

int x1 = x+move[i][0];

int y1 = y+move[i][1];

if( 0==chess[x1][y1]&&x1>=0&&x1=0&&y1執行結果

相同條件下,回溯次數明顯減少了幾個數量級。

騎士周遊問題

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

15騎士周遊問題(馬踏棋盤問題)

輸出5 5棋盤的騎士周遊的方法數 include include define x 5 define y 5 int chess x y 二維陣列的初始化,兩個大括號 int count 0 void print printf n 這裡的 n放置也非常巧妙,一行之後換行 printf n 一趟走完也...

BNU 4184 騎士周遊列國

直接dfs 肯定 tle 需要加乙個剪枝。include include include includeusing namespace std int mp 8 8 n,nn const int fx const int fy struct node int cmp node a,node b re...