回溯法解決馬步遍歷問題

2021-05-25 18:08:17 字數 939 閱讀 7152

設計一演算法,求解西洋棋中的馬的周遊問題:給定一8×8的棋盤,馬從棋盤的某個位置出發,經過棋盤中的每乙個方格恰好一次。(只需求一可行解)

一、 演算法思想描述

指定乙個起點座標,從起點開始對每個點遍歷其能到達的八方向上的點,如果可以踩則走到該結點上,並繼續深入遍歷,直到最後走完所有的結點。

二、 完整的程式以及說明

code:

#include

using

namespace std;   

//      棋盤大小

#define n 8

// 八方向

#define dir 8

int dir[dir][2] = , , , , , , ,  };   

int mz[n][n];   

bool flag;   

int sx, sy;   

/**

* 遍歷演算法

* 輸入: 起點座標

*/void chess(int x, int y, int t)   

putchar('/n');   

}   

return;     

}   

//      八方向可以走到的格仔

for(int i=0; iint tx = x+dir[i][0];   

int ty = y+dir[i][1];   

//      如果存在該格並且沒走過

if(tx>=0&&tx=0&&ty//      走進去

chess(tx,ty,t+1);   

}   

}   

//      還原狀態

mz[x][y] = 0;   

}   

int main()  

回溯法 解決堡壘問題

描述 城堡是乙個4 4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都會把對方打掉。問對於給定的一種狀態,最多能夠修建幾個堡壘。輸入 每...

回溯法解決迷宮搜尋問題

演算法思路 定義乙個二維陣列,其中的0代表通路,1代表牆,然後定義乙個結構體表示每乙個節點的屬性,struct st 定義乙個棧,儲存路徑 然後定義乙個棧來儲存節點。include include include using namespace std 用棧實現路徑的儲存 define maxsiz...

回溯法解決n皇后問題

回溯法的基本行為是搜尋,搜尋過程使用剪枝函式來為了避免無效的搜尋。剪枝函式包括兩類 1.使用約束函式,剪去不滿足約束條件的路徑 2.使用限界函式,剪去不能得到最優解的路徑。1 針對所給問題,確定問題的解空間 首先應明確定義問題的解空間,問題的解空間應至少包含問題的乙個 最優 解。2 確定結點的擴充套...