拓撲排序hdu 1285

2021-10-23 03:47:32 字數 1140 閱讀 3829

迴圈結束後,若輸出的頂點數小於網中的頂點數,則輸出「有迴路」資訊,否則輸出的頂點序

題目鏈結

這裡先使用陣列進行排序,但是發現有用佇列進行排序的,所有準備學會佇列進行拓撲排序後再進行優化

//某點入度,有多少條路徑指向該點

//陣列實現拓撲排序

#include #include using namespace std;

int g[510][510];

int d[510];

void topsort(int n)

}topsort(n);

}return 0;

}

下面使用佇列進行操作,由於是輸出最小序列,所以這裡使用優先佇列

有些拓撲排序要求字典序最小什麼的,那就把佇列換成優先佇列就好了

//某點入度,有多少條路徑指向該點

//佇列實現拓撲排序,儲存用的陣列可以換成vector;

#include #include #include #include using namespace std;

int g[510][510];

int d[510];

void topsort(int n)

}int count = 0;

while(!q.empty())}}

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

}topsort(n);

}return 0;

}

還有一種形式

**如下

//某點入度,有多少條路徑指向該點

//佇列實現拓撲排序,儲存用的陣列可以換成vector;

#include #include #include #include using namespace std;

int g[510][510];

int d[510];

void topsort(int n)

}int count = 0;

while(!q.empty())}}

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

}topsort(n);

}return 0;

}

hdu1285(拓撲排序)

拓撲排序簡單來說就是把乙個圖的所有節點排序,使得每一條有向邊 u,v 對應的u都排在v的前面。拓撲排序最大的用途就是判斷乙個有向圖是否有環,當然判斷還有一種方法就是floyd演算法。如果用鄰接表的話拓撲排序的時間複雜度是o n e 鄰接矩陣是o n 2 n表示頂點數,e表示邊數,floyd時間複雜度...

hdu 1285(拓撲排序)

題意 給各個隊間的勝負關係,讓排名次,名詞相同按從小到大排。解析 拓撲排序是應用於有向無迴路圖 direct acyclic graph,簡稱dag 上的一種排序方式,對乙個有向無迴路圖進行拓撲排序後,所有的頂點形成乙個序列,對所有邊 u,v 滿足u 在v 的前面。該序列說明了頂點表示的事件或狀態發...

HDU1285 拓撲排序

拓撲排序的水題,題意是確定比賽的名次,每一次將輸的人的入度加一,然後就是拓撲排序的模板套路了,記住輸入的時候可能有重邊,貼 include include include include using namespace std int map 600 600 head 600 hash 600 in...