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); } }
原文地址:http://blog.csdn.net/guodongxiaren/article/details/37932369