問題:
給定乙個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...