解題:
拓撲排序
是對有向無環圖的一種排序。表示了頂點按邊的方向出現的先後順序。如果有環,則無法表示兩個頂點的先後順序。
乙個簡單的求拓撲排序的演算法:首先要找到任意入度為0的乙個頂點,刪除它及所有相鄰的邊,再找入度為0的頂點,
以此類推,直到刪除所有頂點。頂點的刪除順序即為拓撲排序。
性質
1、 拓撲排序在有向無環圖中才能排出有效的序列,否則能判斷該有向圖有環。
2、如果輸入的有向圖中的點,不存在入度為0的點,則該有向圖存在迴路
3、如果存在的入度為0的點大於乙個,則該有向圖肯定不存在乙個可以確定的拓撲序列但並不妨礙拓撲排序
#include#includeint map[510][510],into[510],ans[510];
void topu(int n)
}//拓撲排序模板
int main()
topu(n);
for(i=1;iprintf("%d ",ans[i]);
printf("%d\n",ans[n]);
}return 0;
}
HDU1285 確定比賽名次
problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序...
hdu 1285 確定比賽名次
因為輸入資料一定有解,並且要編號小的隊伍在前,那麼用優先佇列儲存結果集即可。拓撲排序關鍵在於需要維護乙個入度為0的頂點的集合。只出不入 include include include include define max 510 using namespace std struct adj adj ...
HDU 1285 確定比賽名次
拓撲排序水題,這題要求如果有兩個點同時入度為0時,要求序號小的排前面,所以用鄰接矩陣爆搜兩遍就好了,應該是比用dfs好處理的。include include include include using namespace std int n,m int graph 105 105 int indeg...