递归return,循环调用的问题

赤练仙子_ 赤练仙子_ 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
[编程题]有向路径检查
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针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具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

weixin_38663452

js代码-递归循环1-100的和

js代码-递归循环1-100的和

weixin_38623366

JavaScript的递归之递归与循环示例介绍

对于不同类型的需要重复计算的问题,循环和递归两种方法各有所长,能给出更直观简单的方案,下面为大家详细的介绍下JavaScript的递归与循环,感兴趣的朋友可以了解下

weixin_38643269

循环和递归在算法中的应用

顺序执行、循环和跳转是冯·诺依曼计算机体系中程序设计语言的三大基本控制结构,这三种控制结构构成了千姿百态的算法,程序,乃至整个软件世界。递归也算是一种程序控制结构,但是普遍被认为不是基本控制结构,因为递归结构在一般情况下都可以用精心设计的循环结构替换,因此可以说,递归就是一种特殊的循环结构。因为递归方法会直接或间接调用自身算法,因此是一种比迭代循环更强大的循环结构。

Update_l

计算递归函数调用次数

根据题目要求使用递归函数,根据题目给定的数学算式,求出Succ(n)的值。可以在每一次调用递归函数时增加一个计数器,用来计算调用了多少次函数,最后输出Succ(n)的值和调用递归函数次数的值。

bellissima224
评论 7
收藏 已收藏
分享
返回顶部
赤练仙子_
C++ 语言 65,214 成员 250,514 内容