基本回溯問題

2021-06-29 04:36:28 字數 910 閱讀 2635

昨天看到面試的問題涉及到八皇后的計算,因為個人感覺八皇后的問題比較難於理解,所以我就看了乙個簡單的回溯問題

給定乙個字串,給出特定數目字母的所有組合。如字串abcd給定3個長度的組合有abc abd abd bcd 

典型的回溯演算法我之前有接觸過,其實這個問題有點類似於動態規劃的問題,就是分為

子問題1 用這個字母 在接下來的字串裡面選出 少乙個長度的所有組合

子問題2 不用這個字母 在接下來的字串裡選出當前唱的的所有組合

關鍵的問題就是如何確定結束的操作和如何做回溯,把所有的標記的變數都恢復好。

現在我給出我的**

#include#includeusing namespace std;

void show();

int *mark;//0 未使用 1 已經使用

int inputlength;

string input;

int currenttotallength=3;

int currentlength;

void fun(int beginindex)

//不用

fun(beginindex+1);

//用mark[beginindex]=1;

currentlength++;

if(currentlength==currenttotallength)

fun(beginindex+1);

mark[beginindex]=0;

currentlength--;

}void show()

{ for(int i=0;i>input;

// inputlength=input.length();

// mark=new int[inputlength];

// for(int i=0;i

git版本回退問題

git版本回退 注釋 git跟蹤並管理的是修改,而非檔案 當工作區的內容被修改,並未add到暫存區,此時想要丟棄對工作區的修改 git checkout filename 注釋 git checkout 分支名稱 切換到指定分支 當工作區的內容被修改,並且次修改已經add 至暫存區,此時想要將提交到...

回溯演算法問題

回溯問題,其實就是乙個決策樹遍歷。要考慮三個問題。其實回溯問題可以理解為動規的暴力解法,而且是沒有重疊子問題的動規。result public void backtrack 路徑,選擇列表 if 滿足結束條件 result.add 路徑 return for 選擇 in 選擇列表 排除不合法選擇 做...

迷宮回溯問題

概念介紹 請看圖,上圖為乙個迷宮,1為阻擋區間,也就是說不能走。0為可踏足地帶,我們的目標是從a點出發,走到b點,則任務完成!為了方便大家理解,我們只在 3,1 以及 3,2 這兩個位置設定阻擋位。實現 先明確實現思路 假設我們在a 1,1 位置,我們能做的操作是嘗試向下 向右 向上或者向左走一步。...