我有以下问题:
我有一组配对。对是一对整数这对代表“喜欢”。
假设我的集合是:,,,,,
这意味着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 == from
和curr.liked != to
,请检查该路径并更新布尔值,不要返回。循环完成后返回。关于java - Java中的递归搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8456308/