拓撲排序概念:在乙個有向圖中,對所有的節點進行排序,要求沒有乙個節點指向它前面的節點。
過程:先統計所有節點的入度,對於入度為0的節點就可以分離出來,然後把這個節點指向的節點的入度-1。重複此過程直至所有節點都被分離出來。 ps:如果最後不存在入度為0的節點,那就說明有環,不存在拓撲排序,也就是很多題目的無解的情況 。
搞懂拓撲排序後,這個題目就是個模板題,**如下:
#include #include #include using namespace std;
const int maxn=105;
queueq;
vectorvi[maxn];
int in[maxn];//in[n]代表第n個節點的入度
int main()
} for(int i=1;i<=n;i++) cout << in[i] << " ";
cout << endl;
for(int i=1;i<=n;i++)
int cnt=0;//操作次數
while(!q.empty())//遍歷佇列
}cnt++;
}//如果cnt==n,代表所有的節點都可以被分離出來,即不存在環
if(cnt==n) cout << 1 << endl;
else cout << 0 << endl;
return 0;
}
PTA 任務排程的合理性 拓撲排序
題意 假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,...
任務排程的合理性
假定乙個工程專案由一組子任務構成,子任務之間有的可以並行執行,有的必須在完成了其它一些子任務後才能執行。任務排程 包括一組子任務 以及每個子任務可以執行所依賴的子任務集。比如完成乙個專業的所有課程學習和畢業設計可以看成乙個本科生要完成的一項工程,各門課程可以看成是子任務。有些課程可以同時開設,比如英...
pta 任務排程合理性
拓撲排序,三重迴圈,在pta上一般不會超時,不過,為了以防萬一,可以在找到入度為零的點之後先把指標存起來,再另外寫乙個迴圈,再去刪除他的後續任務的度,這樣就是兩個雙重迴圈,而不是三重迴圈,可以大大節約時間,三重迴圈 如下 5 34 任務排程的合理性 25分 假定乙個工程專案由一組子任務構成,子任務之...