Ordering Tasks-簡單的拓撲排序
題意:通過輸入m條兩任務間的優先順序,輸出一個可能的任務順序;
思路;拓撲排序,就是建立一個圖,每次選擇入度為零的頂點,將與之關聯的點的入度減一。
拓撲的關鍵兩步驟:
1.入度為零的頂點輸出;
2.將該點連得邊去掉。(即與之關聯點的入度減一)
#include<iostream> #include<cstring> #include<stack> using namespace std; const int maxn=101; int Adj[maxn][maxn], inDegree[maxn], n, m; stack<int> stk; void CreatGraph(){ memset(Adj, 0, sizeof(Adj)); memset(inDegree, 0, sizeof(inDegree)); int u, v; while(m--) { cin>>u>>v; Adj[u][v]=1; inDegree[v]++; } for(int i=1; i<=n; i++)//將入度為零的點入棧。 if(inDegree[i]==0) stk.push(i); return; } void tpSort(){ int order[n];//輸出的順序 int it, cnt=0; while(stk.size())//棧不為空就說明還有入度為零的點未輸出。 { it=stk.top(); stk.pop(); for(int i=1; i<=n; i++) { if(Adj[it][i] && inDegree[i]) inDegree[i]--; if(Adj[it][i] && !inDegree[i])//入度為零則進棧。 stk.push(i); } order[cnt++]=it;//將該點存入序列。 } for(int i=0; i<n-1; i++) cout<<order[i]<<" "; cout<<order[n-1]<<endl; return; } int main(){ while(cin>>n>>m && n+m) { CreatGraph(); tpSort(); } return 0; }
相關推薦
【uva-10305】Ordering Tasks (拓撲排序中最簡單的一道
題目大意: m是任務數,n是已知偏序個數。 接下來n行是偏序。 最後輸出滿足偏序條件的任意一組。 很隨意很和諧的。 連谷歌翻譯都不用的。 /* uva 10305 by zhuhua Time limit: 3000 ms AC Time:
UVA 10305- Ordering Tasks(經典拓撲排序)
John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only possible if other tasks have already been e
D - Ordering Tasks (拓撲排序)
lap sed pan bre mem eof event int vector D - Ordering Tasks 題意:給個有向圖,進行拓撲排序 1 /***********************************************/
Ordering Tasks(拓撲排序)
Problem F Ordering Tasks Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB John has n tasks to do.
UVA 10305 —— Ordering Tasks(拓撲排序入門)
10305 - Ordering Tasks Time limit: 3.000 seconds Problem F Ordering Tasks Input: standard input Output: standard output Time Limit: 1 se
Ordering Tasks-簡單的拓撲排序
題意:通過輸入m條兩任務間的優先順序,輸出一個可能的任務順序; 思路;拓撲排序,就是建立一個圖,每次選擇入度為零的頂點,將與之關聯的點的入度減一。 拓撲的關鍵兩步驟: 1.入度為零的頂點輸出; 2.
Ordering Tasks 拓撲排序
div == i++ out pri relation algo -- char John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one t
【Vj作業】【拓撲排序經典理解題】Ordering Tasks 1、Kahn算法;2、基於DFS的算法。
pri from have for 失敗 dep empty enc there 2018-02-13 鏈接 https://cn.vjudge.net/contest/211129#problem/D John has n tasks to do. Unfortuna
UVA 10305 Ordering Tasks(拓撲排序的隊列解法)
題目 space while 一行 class == 整數 cstring 關系 題目鏈接: https://vjudge.net/problem/UVA-10305#author=goodlife2017 題目描述 John有n個任務,但是有些任務需要在做完另外一些任務後
Ordering Tasks UVA - 10305(拓撲排序)
size main std 有環 eof color 完全 一個 技術 在一個有向圖中,對所有的節點進行排序,要求沒有一個節點指向它前面的節點。 先統計所有節點的入度,對於入度為0的節點就可以分離出來,然後把這個節點指向的節點的入度減一。 一直做改操作,直到所有的節點都被分
Ordering Tasks 拓撲排序基礎水題 佇列和dfs實現
今天剛學的拓撲排序,大概搞懂後發現這題是赤裸裸的水題。 於是按自己想法敲了一遍,用queue做的,也就是Kahn演算法,複雜度o(V+E),調完交上去,WA了。。。 於是檢查了一遍又交了一發,還是WA。。。 我還以為是用queue的問題,改成stack也WA,然後乾脆放棄S
拓撲排序java簡單實現
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Sca
Sorting It All Out(簡單的拓撲排序)
題目來源:[NWPU][2014][TRN][16]圖論拓撲排序 A 題 http://vjudge.net/contest/view.action?cid=51448#problem/A 作者:npufz 題目: A - Sorting It All Out
確定比賽名次(簡單的拓撲排序)
確定比賽名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 505 Accepted Submiss
【topoSort拓撲排序】1424. 獎金(簡單題目看拓撲排序)
1424.獎金 Description 由於無敵的凡凡在2005年世界英俊帥氣男總決選中勝出,Yali Company總經理Mr.Z心情好,決定給每位員工發獎金。公司決定以每個人本年在公司的
拓撲排序簡單應用poj2367
//題目大意:輸入n,接下來n行,每一行的編號都比這一行的數字優先 //關於拓撲排序的內容可以看本部落格http://blog.csdn.net/fengsigaoju/article/details
hdu1285確定比賽名次(最簡單的拓撲排序)
Input 輸入有若干組,每組中的第一行為二個數N(1<=N<=500),M;其中N表示隊伍的個數,M表示接著有M行的輸入資料。接下來的M行資料中,每行也有兩個整數P1,P2表示即P1隊贏
拓撲排序入門(真的很簡單)
在一個有向圖中,對所有的節點進行排序,要求沒有一個節點指向它前面的節點。先統計所有節點的入度,對於入度為0的節點就可以分離出來,然後把這個節點指向的節點的入度減一。一直做改操作,直到所有的節點都被分離出來。如果最後不存在入度為0的節點,那就說明有環,不存在拓撲排序,也就是很多
拓撲排序
i++ nbsp 分享 方案 emp obi res bcb 選修課 概述 對一個 有向無環圖(Directed Acyclic Graph, DAG) G 進行拓撲排序,是將 G 中的所有頂點排成一個線性序列, 使得圖中任意一對頂點 u 和 v,若邊 <u,v>
拓撲排序講解
name data 技術 com con 計算 16px edge idt 在這裏我們要說的拓撲排序是有前提的 我們在這裏說的拓撲排序是基於有向無環圖的!!!。 (⊙o⊙)…我所說的有向無環圖都知道是什麽東西吧。。 如果不知道,我們下面