题解 | #任务调度#
任务调度
https://www.nowcoder.com/practice/88d5fa34fe0748e09062e48c6ae6ffc7
#include <iostream> #include <map> #include <string> #include <vector> using namespace std; int strnum(string s){ int i,num=0; for (i=0; i<s.length(); i++) { num*=10; num+=s[i]-'0'; } return num; } int main() { int n,i,j,t,k=0; cin>>n; string s,temp; vector<vector<int>>m(n); vector<int>res(n,0); vector<int>v; getchar(); for(i=0;i<n;i++){ getline(cin,s); v.clear(); for(j=0;j<s.length();j++){ temp=""; while(s[j]>='0'&&s[j]<='9'){ temp+=s[j]; j++; } if(temp!="")v.push_back(strnum(temp)); temp=""; }//将代码中的数字部分提取出 for(j=1;j<v.size();j++){ m[v[0]].push_back(v[j]); res[v[j]]++; }//将每个任务所指向的任务标明 } while(k<n){ for(i=0;i<n;i++){ if(res[i]==0){//输出入度为0的结点 cout<<"Task"<<i<<' '; res[i]=-1;//已经输出的任务号设为-1 for(j=0;j<m[i].size();j++){ res[m[i][j]]--;//根据任务指明将所对应的入度数减一 } k++; break; } } } } // 64 位输出请用 printf("%lld")