题解 | #任务调度#

任务调度

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")

全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务