ACM學習歷程30 回溯演算法

2021-07-23 03:57:16 字數 1262 閱讀 5511

一、回溯演算法也叫試探法,它是一種系統地搜尋問題的解的方法。回溯演算法的基本思想是:從一條路往前走,能進則進,不能進則退回來,換一條路再試。用回溯演算法解決問題的一般步驟為:

1、定義乙個解空間,它包含問題的解。

2、利用適於搜尋的方法組織解空間。

3、利用深度優先法搜尋解空間。

4、利用限界函式避免移動到不可能產生解的子空間。

二、回溯舉例

2.1皇后問題

問題描述:在n×

n 格的棋盤上放置彼此不受攻擊的

n 個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。

n皇后問題等價於在n×

n格的棋

上放置n個皇后,任何

2 個皇后不放在同一行或同一列或同一斜線上。

輸入:輸入資料只佔一行,有1 個正整數n,

n≤20。

輸出:將計算出的彼此不受攻擊的n個皇后的乙個放置方案輸出。

解答**:

#include#include#includeusing namespace std;

#define row 8

#define col 8

int sum=0;

int m[row][col]=;

bool check(int row,int col)

i=row-1;

j=col+1;

while(i>=0 && j

#include#include#includeusing namespace std;

int total=0;

int c[10]=;

int result[20][20]=;

void search(int cur,int n)

, ,

, ,

, ,

};int x=1,y=1,xx=5,yy=5;

int sum=0;

int xh[4]=;

int yh[4]=;

void find(int x,int y);

void output();

ofstream fout("estdout_2.pc2");

int main()

;int yh[8]=;

int num=1;

int result=0;

int vist[size][size];

void output()

{ int i,j;

for(i=0;i=0 && u=0 && v

39 回溯演算法

var res 全域性遍歷,下標表示行,值表示queen所在列 cal8queens 0 遞迴函式,求每行的queen function cal8queens row for let col 0 col 8 col 判斷棋子放在 row,col 位置,是否正確 function isok row,c...

演算法8 回溯

理論基礎 回溯法是一種組織搜尋的一般技術,有 通用的解題法 之稱,用它可以系統的搜尋乙個問題的所有解或任一解。有許多問題,當需要找出它的解集或者要求回答什麼解是滿足某些約束條件的最佳解時,往往要使用回溯法。可以系統地搜尋乙個問題的所有解或任意解,既有系統性又有跳躍性。回溯法的基本做法是搜尋,或是一種...

六 回溯演算法

基本思想 回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇。滿足回溯條件的某個狀態的點...