递归好吗?

时间:2017-02-05 16:53:39

标签: c++ try-catch

所以这个玩具问题是一个图形问题,使用dfs来查看整个课程安排是否有效,并且没有不能采取的课程,因为它的先例不能被采取等等...... / p>

我想知道在访问方法中使用throw是否是一种好习惯。因为如果我们在图中找到一个循环,我就可以抛出。现在,投掷完全忽略了堆栈并直接向下发送,直到它找到一个捕获。如果是这样,这是否意味着,而不是实现访问方法,以便在找到循环时返回false。只是抛出而不是一直向下返回false会更快?这是生产级代码的良好实践吗?还是返回bool方法更好?

class Solution {
public:
    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
        vector<list<int>> vMap(numCourses);
        vector<bool> globalVisited(numCourses, false);
        for (auto it : prerequisites){
            vMap[it.first].push_back(it.second);
        }
        try {
            for (int i=0; i<numCourses; i++){
                if (globalVisited[i] != true){
                    vector<bool> localVisited(numCourses, false);
                    visit(vMap, globalVisited, localVisited, i);
                }
            }           
        }
        catch (...){
            return false;
        }
        return true;
    }

    void visit(vector<list<int>>& vMap, vector<bool>& globalVisited, vector<bool>& localVisited, int i){
        if (globalVisited[i] == true){ //reached a deadend, try a different node
            return;
        }
        else if (localVisited[i] == true){ //found a cycle
            throw new exception;
        }
        localVisited[i] = true;
        for (auto it : vMap[i]){
            visit(vMap, globalVisited, localVisited, it);
        }
        globalVisited[i] = true;
    }
};

0 个答案:

没有答案
相关问题