我有以下问题:
我有一组配对。对是一对整数这对代表“喜欢”。
假设我的集合是:,,,,,
这意味着1喜欢2,2喜欢1,3喜欢1等等。。。
我被要求做的是把这些关系看作一个图,给出两个数,比如2和6,我必须找出一个图中是否有一条从2到6的路径,它们之间最多有5条边连接…
如何编写计算路由是否存在的短递归方法?
我写了以下代码:

private boolean findPath(int from, int to, int count){
    System.out.println(from+" "+to+" "+count);
    if(from==to && count<=5)
        return true;
    if(count>5)
        return false;
    Iterator<CookingParty.Pair> iter=likesSet.iterator();
    while(iter.hasNext()){
        Pair curr=iter.next();
        if(curr.likes==from && curr.liked==to){
            return true;
        }
        if(curr.likes==from)
            return findPath(curr.liked, to, count+1);

    }

    return false;
}

问题是,一旦发现一个错误,它就不会继续讨论其余的可能性。
我怎样才能把它换成工作?
这是更新:
private boolean findPath(int from, int to, int count){
System.out.println(from+" "+to+" "+count);
    if(from==to && count<=5)
        return true;
    if(count>5)
        return false;
    Iterator<CookingParty.Pair> iter=likesSet.iterator();
    boolean found=false;
    while(iter.hasNext() && !found){
        Pair curr=iter.next();
        if(curr.likes==from && curr.liked==to){
            found=true;
            return found;
        }
        if(curr.likes==from)
        return findPath(curr.liked, to, count+1);

    }

    return found;

}

最佳答案

目前,只要找到一对curr.likes == from,您就可以返回。若要同时探索其他路径,不能立即返回while循环,但在尚未找到路径的情况下,请检查进一步的可能性。

boolean found = false;
while(iter.hasNext() && !found){
  // check a path
}
return found;

重新更新:您仍在循环中返回如果你找到了一条路,那没关系,但在一般情况下你绝对不能回来如果curr.likes == fromcurr.liked != to,请检查该路径并更新布尔值,不要返回。循环完成后返回。

关于java - Java中的递归搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8456308/

10-11 21:24