leetcode Course Schedule II

刚刚学了下拓扑排序,于是找了道题来做下

代码如下

class Solution {
public:
    struct node{
        int val;
        node* next;
        node(){
            val=-1;
            next=0;
        }
    };
    
    vector<node*> nodes;
    vector<int> in;
    vector<int> left;
    
    vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
        node n;
        vector<int> result;
        for(int i=0;i<numCourses;i++){
            nodes.push_back(0);
            in.push_back(0);
            left.push_back(i);
        }
        for(int i=0;i<prerequisites.size();i++){
            int v1=prerequisites[i].first;
            int v2=prerequisites[i].second;
            node* new_node=new node;
            new_node->val=v1;
            new_node->next=nodes[v2];
            nodes[v2]=new_node;
            in[v1]++;
        }
        
        while(left.size()){
            bool check=false;
            for(vector<int>::iterator i=left.begin();i!=left.end();i++){
                if(!in[*i]){
                    node* ptr=nodes[*i];
                    result.push_back(*i);
                    while(ptr!=NULL){
                        in[ptr->val]--;
                        ptr=ptr->next;
                    }
                    i=left.erase(i);
                    check=true;
                    break;
                }
            }
            if(!check){
                vector<int> tmp;
                return tmp;
            }
        }
        return result;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值