問題分析 怎麼說呢 拓撲排序 給我的感覺就是 一棵樹 從樹冠 往下
每次遇到 比他的小的 就把它的入度+1 就往樹下 走 然後從樹冠 找
入度為0 是就是乙個 小樹冠 其下擁有若干 小樹 小分支的入度為0 意味著到了
小樹冠的底部但著並不意味著 這就是最小值 因為 可能還有比這個數的最大入度
還大的數存在
為了滿足 不確定的 名次按照 隊伍字典序排序
借助於優先佇列來實現這個; 首先將 起始入度為0 的隊伍加入 這意味著 樹冠 (他們的 名詞相對來說是靠前的單不能確定他們的具體名詞 優先佇列巴拉巴拉…)
然後 出隊 掃瞄 分支 入度減一 存在 入度為0 就繼續加入優先佇列
具體**如下:
#include
#include
#include
#include
#define mem(a) memset(a,0,sizeof(a))
using
namespace std;
int n,m,map[
505]
[505
],in[
505]
;int
main()
} priority_queue<
int,vector<
int>
,greater<
int>
> q;
for(
int i=
1;i<=n;i++
)bool f=0;
while
(q.size()
)}} cout<}return0;
}
問題分析 :
和上個 拓撲排序一樣只不過是是反向查詢 是否是存在迴圈結構 如果 存在就意味這有錯誤
而這在 程式中反映出來就是 查詢值等於n;
具體**如下:
#include
#include
#include
#include
#define mem(a) memset(a,0,sizeof(a))
using
namespace std;
int n,m,map[
505]
[505
],in[
505]
;int
main()
}int flag=0;
int i,j;
for( i=
0;i)break;}
}if(j==n)}if
(flag)
cout<<
"no\n"
;else
cout<<
"yes\n";}
return0;
}
就是拓撲排序 中間 加了乙個 一888作為基值
**如下:
#include
#include
#include
#include
#define mem(a) memset(a,0,sizeof(a))
using
namespace std;
intmain()
for(
int i=
1;i<=n;i++)if
(!in[i]
)int tot=0;
int sum=0;
while
(!q.
empty()
)}if(totcout<<-1
cout<}return0;
}
拓撲排序總結
拓撲排序主要的作用是可以用來判斷,當前圖中是否含有環。其主要的實現思想是,從圖中的入度為零的點開始,如果找到,就將這個點從圖中刪去,並更新與這個點相連的其他點的入度資訊,直到全部的點都被刪去,或者圖中沒有入度為零的點,如果是後一種情況,那麼證明圖中含有環。的實現具體如下 include using ...
總結 拓撲排序
dm vincent的專欄 某推酷總結 最近花了一點點時間學了拓撲排序,感覺到圖論真是神奇。總的來說,拓撲排序的題還是有一定的靈活度的,除去一些比較水的題,很容易跟其他演算法或者資料結構混在一起,一下子難度就上去了,也從單一的模板的題變為了多重模板題或者智力題。拓撲排序比較好理解,就是建立有向圖,每...
python 拓撲排序 Python 拓撲排序
python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...