标签:rect 生产 function empty name 技术 问题 int blank
1.AOV与DAG
活动网络可以用来描述生产计划、施工过程、生产流程、程序流程等工程中各子工程的安排问题。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 #include<stack> 8 #include<map> 9 #include<set> 10 #include<sstream> 11 #include<functional> 12 using namespace std; 13 typedef long long ll; 14 const int maxn = 1000 + 10; 15 const int INF = 1e9 + 7; 16 int T, n, m, cases; 17 vector<int>Map[maxn]; 18 int Count[maxn]; 19 void topo() 20 { 21 stack<int>s;//存储入度数为0的顶点 22 vector<int>v;//存取拓扑排序的答案 23 for(int i = 1; i <= n; i++)//下标从1开始 24 if(Count[i] == 0)s.push(i); 25 while(!s.empty()) 26 { 27 int now = s.top(); 28 v.push_back(now); 29 s.pop(); 30 for(int j = 0; j < Map[now].size(); j++) 31 { 32 if((--Count[Map[now][j]]) == 0) 33 { 34 s.push(Map[now][j]); 35 } 36 } 37 } 38 if(v.size() != n)cout<<"Network has a cycle!"<<endl; 39 else 40 { 41 cout<<"Great! There is not cycle."<<endl; 42 for(int i = 0; i < v.size(); i++)cout<<v[i]<<" "; 43 cout<<endl; 44 } 45 } 46 int main() 47 { 48 while(cin >> n >> m) 49 { 50 if(!n && !m)break; 51 int u, v; 52 for(int i = 0; i <= n; i++)Map[i].clear(); 53 memset(Count, 0, sizeof(Count)); 54 for(int i = 0; i < m; i++) 55 { 56 cin >> u >> v; 57 Map[u].push_back(v); 58 Count[v]++;//存入度 59 } 60 topo(); 61 } 62 return 0; 63 }
时间复杂度:由于每个点入栈出栈一次,每条边扫描一次,时间复杂度为O(m + n)
标签:rect 生产 function empty name 技术 问题 int blank
原文地址:https://www.cnblogs.com/fzl194/p/8747537.html