1 回溯 ,回溯是一種演算法設計的思維方式。
在我現階段的理解 :回溯是在進行解的狀態搜尋中,當某一分支無解的時候,回溯到乙個前乙個狀態搜尋另外乙個分支,如果第一步的所有分支都無解,那麼判定為無解。否則直到找到我們所要的答案。
在寫遞迴的時候,常常遇到要回溯的情況,但是經常腦袋會卡殼, 主要是在狀態回溯的時候,不知如何儲存和恢復狀態。比如火車進站 序列問題:
在station 中,進站和出站的順序不同,可以導致b 中的序列也不同,然後要求我們輸出所有的出站序列。
這個遞迴方程很好寫 ,
foo(m,n) //表示 在a中車廂 和station 車廂的個數
有兩種轉移方式 -->foo(m,n-1) 要麼station 乙個車廂出來
--> foo(m-1,n+1) 要麼 a中乙個車廂到station 中
當m ==0 和 n==0 的時候,結果就出來了。
a 表示 初始站 b 是中間的那個中轉站 c 是終點
感謝csdn 使用者 thefirstz 指出我的錯誤
#include #include #include #include #include using
namespace std;
const
int n = 1000;
int a[n],d[n];
stack b,c;
int m;
//void cp(stack&src ,)
void foo(int n,int m)
for(i = m ; i > 0 ; i --)
}if(n > 0)
if( m >0 && !b.empty())
}int main()
火車進站問題
給定乙個正整數n代表火車數量,0 比如火車進站 序列問題 c include include include include using std stack using std vector using namespace std bool ispoporder const int put orde...
火車進站問題
描述 給定乙個正整數n代表火車數量,0 知識點棧 執行時間限制 0m記憶體限制0輸入 有多組測試用例,每一組第一行輸入乙個正整數n 0 輸出輸出以字典序排序的火車出站序列號,每個編號以空格隔開,每個輸出序列換行,具體見sample。樣例輸入 31 2 3 樣例輸出 1 2 3 1 3 2 2 1 3...
火車進站出站問題
火車編號為 1 9,且不重複。如 編號分別為 1 2 3 4 5 的5個火車順序進站,那麼進站序列為 12345 全部進站後再順序出站,則出站序列為 54321 如果先進1,2,然後2出站,然後1出站,然後再3進站 出站,4進站 出站,5進站 出站,那麼出站序列就為21345.問題分析 棧具有先進後...