問題描述:
火車編號為:1~9,且不重複。
如:編號分別為「1」、「2」、「3」、「4」、「5」的5個火車順序進站,那麼進站序列為「12345」,全部進站後再順序出站,則出站序列為「54321」,如果先進1,2,然後2出站,然後1出站,然後再3進站、出站,4進站、出站,5進站、出站,那麼出站序列就為21345.
詳細描述:
int judgetrainsequence (int maxnum, char *poutseq);
輸入引數:
int maxnum:進站的火車最大編號
char* poutseq:使用字串表示火車出站序列
輸出引數(指標指向的記憶體區域保證有效):
無。返回值:
int: 根據輸入的進站序列判斷,如果輸入的出站序列是可能的,返回1,否則返回0;
基本思路:
stack陣列用來表示火車進站的棧,queue用來表示12345.。。n的要進站的火車佇列(左邊是棧和佇列的雙重性質),cand是出站的火車,是棧的結構。
backtrace(int *stack,int* pstack,int* queue,int* pqueue,int *cand,int* pcand,int candnum)
void printpath()
bool isstackempty()
bool isqueueempty()
/******3選二的對稱操作******************/
void rollbackqueue(int )
int popstack()
void encand(int )
/***********************/
/******** 3選二的對稱操作**********************/
int rollbackcand()
void pushstack(int)
int outqueue()
/****************************/
backtrace(int *stack,int* pstack,int* queue,int* pqueue,int *cand,int* pcand,int candnum)
// sibling1 // 如果棧非空,火車出站
if(!isstackempty())
else;//棧空了,什麼都不做。
//sibling2:如果佇列非空,則火車入站
if(!isqueueempty())
else; // 佇列空了,說明沒有可用元素,只能彈棧了
}void init(n)// 設有n輛車入棧
演算法 回溯法解決最佳排程問題
問題 假設有 n 個任務由 k 個可並行工作的機器來完成。完成任務 i 需要時間為ti 設計完成這 n 個任務的最佳排程演算法,使得完成全部任務的時間最早。演算法設計 從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。按照回溯法搜尋排列樹的演算法框架,設開始時t...
演算法 回溯法解決最佳排程問題
問題 假設有 n 個任務由 k 個可並行工作的機器來完成。完成任務 i 需要時間為ti 設計完成這 n 個任務的最佳排程演算法,使得完成全部任務的時間最早。演算法設計 從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。按照回溯法搜尋排列樹的演算法框架,設開始時t...
回溯法 最佳排程問題
一 題目要求 設有n個任務由k個可並行工作的機器來完成,完成任務i需要時間為。試設計乙個演算法找出完成這n個任務的最佳排程,使完成全部任務的時間最早。二 演算法設計與分析 該演算法可抽象為子集樹回溯演算法,針對特定的任務數和機器數定 空間,對於n個任務和k個機器,解編碼 x1,x2,xn xi表示給...