遞迴解題 回溯 火車進站問題

2021-06-05 02:02:10 字數 954 閱讀 8978

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.問題分析 棧具有先進後...