标签:
有n个课程,输入一些二元组(x,y)表示先学习x必须先学习y,求根据输入的二元组的关系,能否修完所有课程
拓扑排序:选择一个入度为0的节点,删除该节点并且删除该节点所有的指出去的边,重复这个过程,知道没有入度为0的节点或者所有节点都被删除
bfs来做。不用bfs也行,模拟这个过程就行了
1 class Solution { 2 public: 3 bool bfs(queue<int> q,vector<vector<int> > v,int len[],int num){ 4 while(!q.empty()){ 5 int tmp=q.front(); 6 q.pop(); 7 for(int i=0;i<v[tmp].size();i++){ 8 len[v[tmp][i]]--; 9 if(len[v[tmp][i]]==0) q.push(v[tmp][i]); 10 } 11 } 12 for(int i=0;i<num;i++){ 13 if(len[i]!=0) return false; 14 } 15 return true; 16 } 17 bool canFinish(int num, vector<pair<int, int> >& a) { 18 int len[num+1]; 19 memset(len,0,sizeof(len)); 20 vector<vector<int> > v(num+1); 21 for(int i=0;i<a.size();i++){ 22 len[a[i].first]++; 23 v[a[i].second].push_back(a[i].first); 24 } 25 queue<int> q; 26 for(int i=0;i<num;i++){ 27 if(len[i]==0) q.push(i); 28 } 29 return bfs(q,v,len,num); 30 } 31 };
标签:
原文地址:http://www.cnblogs.com/0summer/p/5828062.html