poj 4084:拓扑排序
生活随笔
收集整理的這篇文章主要介紹了
poj 4084:拓扑排序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
poj 4084:拓?fù)渑判?/h2>
非常好的題目,惡心的算法
描寫(xiě)敘述給出一個(gè)圖的結(jié)構(gòu),輸出其拓?fù)渑判蛐蛄?#xff0c;要求在同等條件下。編號(hào)小的頂點(diǎn)在前。
v<=100, a<=500
解題方案
顯然這是有向圖。然后用了一個(gè)個(gè)人感覺(jué)惡心的算法,個(gè)人建了一個(gè)倒排表。比如針對(duì)上述數(shù)據(jù)
對(duì)于invertlist的下標(biāo) i。其相應(yīng)的元素為一個(gè)list,其為 能到達(dá) i+1 的結(jié)點(diǎn)集合
比如 i =1 時(shí)。 則有 1 -> 2 和 3 -> 2
有這樣一個(gè)表我們就非常方便的檢測(cè)出哪些結(jié)點(diǎn)入度為 0,然后就為拓?fù)渑判蚬タ肆俗隽朔浅:玫匿亯|
個(gè)人代碼
#include <iostream> #include <fstream> #include <list> #include <vector> #include <algorithm> using namespace std;typedef pair<int,int> edge;typedef list<int> *elem;void Topological_sort(vector<elem> &invertList); void read_data(edge* & data,int &v,int &e); void main_solution(); vector<elem> invert_list(edge * data,int v,int e);int main() {main_solution();system("pause");return 0; }void read_data(edge* & data,int &v,int &e) {ifstream reader;reader.open("data.txt");reader>>v;reader>>e;data = new edge[e];for(int i=0;i<e;i++){reader>>data[i].first;reader>>data[i].second;}reader.close(); }void main_solution() {edge* data;int v;int e;read_data( data,v,e );vector<elem> invertList = invert_list( data,v,e );Topological_sort(invertList); }vector<elem> invert_list(edge * data,int v,int e) {vector<elem> result;result.resize(v);for(int i =0;i<v;i++){result[i] = new list<int>;}for(int i=0;i<e;i++){result[ data[i].second-1 ]->push_back(data[i].first);}return result ; }void Topological_sort(vector<elem> &invertList) {const int v = invertList.size(); bool * flag = new bool[v];for(int i=0;i<v;i++){flag[i] = true;}// 找出 v 個(gè)元素for(int i=0;i<v;i++){// 找出一個(gè)元素int j;for(j=0;j<v;j++){// 已經(jīng)找到 Vj+1if( flag[j] && invertList[j]->empty() ){break;}}// 踢出 Vj+1flag[j] = false ;for( int n=0;n<v;n++ ){for(list<int>::iterator it = invertList[n]->begin(); it != invertList[n]->end(); it++){if( *it == j+1 ){invertList[n]->erase(it);break;}}}cout<<"v"<<j+1<<" ";}cout<<endl; }轉(zhuǎn)載于:https://www.cnblogs.com/jzdwajue/p/6874917.html
總結(jié)
以上是生活随笔為你收集整理的poj 4084:拓扑排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机三维机械设计基础答案,计算机三维建
- 下一篇: [洛谷 P4084 USACO17DEC