题解 | #任务调度#

任务调度

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

全部评论

相关推荐

昨天 11:42
江西农业大学 C++
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务