7 34 任務排程的合理性 (25 分)

2021-09-02 10:49:30 字數 1099 閱讀 6956

假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。「任務排程」包括一組子任務、以及每個子任務可以執行所依賴的子任務集。

比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英語和c程式設計,它們沒有必須先修哪門的約束;有些課程則不可以同時開設,因為它們有先後的依賴關係,比如c程式設計和資料結構兩門課,必須先學習前者。

但是需要注意的是,對一組子任務,並不是任意的任務排程都是乙個可行的方案。比如方案中存在「子任務a依賴於子任務b,子任務b依賴於子任務c,子任務c又依賴於子任務a」,那麼這三個任務哪個都不能先執行,這就是乙個不可行的方案。你現在的工作是寫程式判定任何乙個給定的任務排程是否可行。

##輸入格式:

輸入說明:輸入第一行給出子任務數n(≤100),子任務按1~n編號。隨後n行,每行給出乙個子任務的依賴集合:首先給出依賴集合中的子任務數k,隨後給出k個子任務編號,整數之間都用空格分隔。

##輸出格式:

如果方案可行,則輸出1,否則輸出0。

輸入樣例:120

02 1 2

01 4

1 52 3 6

1 32 7 8

1 71 10

1 7輸出樣例:

1、讀入所有定點的依賴關係,確定入度以及出度

2、建立佇列,依次遍歷入度為0的頂點,並對其依賴的頂點進行-1操作

3、加入隊列入隊的數量與頂點數相同,說明不存在dag,否則存在

#include#include#include#include#includeusing namespace std;

struct node

};int main()

}int cnt=0;

node cur;

queueque;

for(int i=1;i<=n;i++)

}while(!que.empty())}}

if(cnt==n)

printf("1\n");

else

printf("0\n");

return 0;

}

7 34 任務排程的合理性 25 分

假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...

7 34 任務排程的合理性 25分

假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...

7 16 任務排程的合理性 25分

假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...