递归return,循环调用的问题
[编程题]有向路径检查
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。
我用的是深度搜索,for循环里return checkPath(a->neighbors[i], b);这句如果checkPath(a->neighbors[i], b)这个函数的返回值是false,return false是不是就跳出for循环,那调用这个函数的父函数里其他邻节点就不遍历了?代码错了?可测试用例都通过了啊。。。求解
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。
我用的是深度搜索,for循环里return checkPath(a->neighbors[i], b);这句如果checkPath(a->neighbors[i], b)这个函数的返回值是false,return false是不是就跳出for循环,那调用这个函数的父函数里其他邻节点就不遍历了?代码错了?可测试用例都通过了啊。。。求解
/*
struct UndirectedGraphNode {
int label;
vector<struct UndirectedGraphNode *> neighbors;
UndirectedGraphNode(int x) : label(x) {}
};*/
class Path {
public:
bool checkPath(UndirectedGraphNode* a, UndirectedGraphNode* b) {
return check(a, b) || check(b, a);
}
bool check(UndirectedGraphNode* a, UndirectedGraphNode* b) {
if (a == NULL || b == NULL)
return false;
if (a == b)
return true;
map<UndirectedGraphNode*, bool> visited;
visited[a] = true;
for (int i = 0; i < a->neighbors.size(); i++)
{
if (a->neighbors[i] == b)
return true;
else
if (visited[a->neighbors[i]] == false)
return checkPath(a->neighbors[i], b);
}
return false;
}
};
...全文
相关推荐
Java中递归、循环的优劣分析
主要给大家介绍了关于Java中递归、循环的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
js代码-递归循环1-100的和
js代码-递归循环1-100的和
JavaScript的递归之递归与循环示例介绍
对于不同类型的需要重复计算的问题,循环和递归两种方法各有所长,能给出更直观简单的方案,下面为大家详细的介绍下JavaScript的递归与循环,感兴趣的朋友可以了解下
循环和递归在算法中的应用
顺序执行、循环和跳转是冯·诺依曼计算机体系中程序设计语言的三大基本控制结构,这三种控制结构构成了千姿百态的算法,程序,乃至整个软件世界。递归也算是一种程序控制结构,但是普遍被认为不是基本控制结构,因为递归结构在一般情况下都可以用精心设计的循环结构替换,因此可以说,递归就是一种特殊的循环结构。因为递归方法会直接或间接调用自身算法,因此是一种比迭代循环更强大的循环结构。
计算递归函数调用次数
根据题目要求使用递归函数,根据题目给定的数学算式,求出Succ(n)的值。可以在每一次调用递归函数时增加一个计数器,用来计算调用了多少次函数,最后输出Succ(n)的值和调用递归函数次数的值。


