标签:统计 void 重载 一个队列 iostream ems 取出 拓扑排序 vector
将度为0的结点编号放入队列(此题放入优先队列中)中。
所以比方priority_queue<int> q。
这里面的元素是降序排列的。
假设我们要实现升序须要重载。
priority_queue<int,vector<int>,greater<int> > q;>>有个有意思的问题是我并没有加vector的头文件。但这样声明一个队列,却并不报错。
看来我对STL底层还是了解不深。。
#include<iostream> #include<queue> #include<cstdio> #include<cstring> using namespace std; bool map[501][501]; int in[501]; priority_queue<int,vector<int>,greater<int> > q; void topo(int n) { for(int i=1;i<=n;i++) { if(in[i]==0) q.push(i); } int c=1; while(!q.empty()) { int v=q.top(); q.pop(); if(c!=n) { cout<<v<<" "; c++; } else cout<<v<<endl; for(int i=1;i<=n;i++) { if(!map[v][i]) continue; in[i]--; if(!in[i]) q.push(i); } } } int main() { int n,m,i,j; while(cin>>n>>m) { int k=0; memset(map,0,sizeof map); memset(in,0,sizeof in); while(m--) { cin>>i>>j; if(map[i][j]) continue; map[i][j]=1; in[j]++; } topo(n); } }
标签:统计 void 重载 一个队列 iostream ems 取出 拓扑排序 vector
原文地址:http://www.cnblogs.com/gavanwanggw/p/6876536.html