設計一演算法,求解西洋棋中的馬的周遊問題:給定一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 確定結點的擴充套...