n(≤)和
m,其中
n是任務交接點(即銜接相互依賴的兩個子任務的節點,例如:若任務2要在任務1完成後才開始,則兩任務之間必有乙個交接點)的數量。交接點按1~
n編號,
m是子任務的數量,依次編號為1~
m。隨後
m行,每行給出了3個正整數,分別是該任務開始和完成涉及的交接點編號以及該任務所需的時間,整數間用空格分隔。
7 8
1 2 4
1 3 3
2 4 5
3 4 3
4 5 1
4 6 6
5 7 5
6 7 2
17
1->2
2->4
4->6
6->7
#include#include#define maxver 105
#define infinity 65535
int g[maxver][maxver]; //圖
int early[maxver]; //最早發生時間
int late[maxver]; //最遲發生時間
int in[maxver]; //入度
int out[maxver]; //出度
int nv,ne; //頂點數目 ,邊數目
void creatgraph();
int earlytime();
void latetime(int scost);
int findmax( int a,int b);
int findmin( int a,int b);
int main()
else}}
}return 0;
}void creatgraph()
early[i] = 0;
late[i] = infinity;
in[i] = 0;
out[i] = 0;
}for( i=0; i=0 )}}
}if( count!=nv)
else}}
return ret;
}void latetime(int scost)
}while( first=1; i--)}}
}}int findmax( int a,int b)
else
}int findmin( int a,int b)
else
}
7 11 關鍵活動(二)
7 11 關鍵活動 鑑於我開始的做法不太好,dfs遍歷了起點和終點間的全部路徑,雖然是可以找到關鍵路徑的,但是還要去重之後才能得到結果。於是嘗試經典的關鍵路徑演算法 1 通過拓撲排序計算出每個節點的最早開始時間,以及乙個拓撲序列s 2 反向遍歷拓撲序列s計算出最晚開始時間 3 節點的最早開始時間 最...
7 11 關鍵活動 (30 分)
假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...
7 11 關鍵活動 30分
假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...