乙個火車排程站的容量為n,若入站口有編號為1、2、…、n的n節車廂,編寫演算法輸出n節車廂的所有出站序列。用回溯法設計該問題的遞迴演算法,
排程站當前狀態下,只有兩種操作:
(1)若入站口車廂非空,則將入站口的k號車廂入棧,進入下乙個狀態繼續試探(遞迴呼叫);
(2)若排程站非空,則將棧頂車廂出棧進入出站序列,進入下乙個狀態繼續試探(遞迴呼叫);
#include
#include
#include
using
namespace
std;
void schedule(vector
&a, stack
&b, vector
&c, int sizec, int starta, int &n)
if(!b.empty())//如果排程站種有列車,出站
if(starta < a.size())//如果排程站外還有列車沒排程,進站
}int main()
2、判斷序列合法性
#include
#include
#include
#include
using
namespace
std;
bool check(stack
& s, const
vector
& in, const
vector
& out, int n)
}//如果當前棧不為空,那麼確定該組值不合法。
if(s.empty())
return
true;
else
return
false;
}int main(int argc, char **argv)
if(check(s, in, out, n))
cout
<< "yes"
<< endl;
else
cout
<< "no"
<< endl;}}
system("pause");
return
0;}
3、
#include
#include
using
namespace
std;
int main()
if(j==k&&k==n-2)
if(j==k)
}} if(hold==true)
}} return
0;}
火車站排程問題
題目要求 1.問題 一列火車要將n節車廂分別送往n個車站,車站按照n,n 1,1的編號次序經過車站。假設車廂的編號就是其目的地車站的編號。2.要求 給定乙個任意的車廂排列次序。重新排列車廂,使其按照從1到n的次序排列。規定重排排程時車廂只能從入軌到緩衝鐵軌,或者從緩衝鐵軌到出軌。include in...
火車進棧 dfs
題目描述 這裡有n列火車將要進站再出站 但是,每列火車只有1節 那就是車頭 描述有n列火車按1到n的順序從東方左轉進站,這個車站是南北方向的,它雖然無限長,只可惜是乙個死胡同,而且站台只有一條股道,火車只能倒著從西方出去,而且每列火車必須進站,先進後出。某生 不就是個棧嗎?每次可以讓右側頭火車進棧,...
火車進棧(DFS
這裡有n列火車將要進站再出站,但是,每列火車只有1節,那就是車頭。這n列火車按1到n的順序從東方左轉進站,這個車站是南北方向的,它雖然無限長,只可惜是乙個死胡同,而且站台只有一條股道,火車只能倒著從西方出去,而且每列火車必須進站,先進後出。也就是說這個火車站其實就相當於乙個棧,每次可以讓右側頭火車進...