思路:
第一步:把所有的入度為0度結點壓入佇列中並讓earliest=0;
第二步:進行topsort,並把每個彈出佇列的元素壓入堆疊中,如果能更新每個彈出元素的鄰接點的earliest就更新。
第三步:找出所有的earliest = 最短工期的頂點,令它們的latest = earliest。
第四步;利用堆疊反向更新每個頂點的latest。
第五步:計算每條邊的靈活時間,如果等於零說明這條邊是關鍵活動,把它輸出。
?分別給出鄰接表實現和鄰接矩陣實現的**:
#include#include#include#include#define inf 65535
#define maxv 105
using namespace std;
int n,m,indegree[maxv];
int flex[maxv][maxv];
struct enode
};vectoradj[maxv];
struct gnode
g[maxv];
void topsort()
} while(!q.empty())
}} if(cnt != n)
for(v=1; v<=n; v++)
printf("%d\n",tlp);
for(v=1; v<=n; v++) }
while(!s.empty())
}} for(v=1; v<=n; v++) }
for(v=1; v<=n; v++) }
}int main()
//printf("g[5].latest = %d\n",g[5].latest);
for(i=0; i#include#include#include#define maxv 105
#define inf 1000000000
using namespace std;
int n,m,indegree[maxv];
int e[maxv][maxv];
int f[maxv][maxv];
struct gnode
g[maxv];
void topsort()
} while(!q.empty())
}} if(cnt!=n)
int wholetime = -1;
for(v=1; v<=n; v++) }
printf("%d\n",wholetime);
for(v=1; v<=n; v++)
while(!s.empty())
}}int main()
for(v=1; v<=n; v++)
topsort();
return 0;
}
高階實驗6 3 5 關鍵活動 30分 拓撲排序
解題思路 1 求拓撲排序判斷任務排程是否可行 2 存在拓撲排序,分別求各交接點的最早完成時間和最遲完成時間 3 找出最早完成時間和最遲完成時間一樣的交接點 4 輸出關鍵活動 include include define max 100 1 define inf 0x3f3f3f3f intg max...
關鍵活動(30 分)
假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...
7 1 關鍵活動 (30 分)
假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...