【发布时间】:2015-10-05 05:14:59
【问题描述】:
这里是新手。甚至更新到递归。我正在为我的 C++ 程序编写一个函数,正如您所知道的,我在递归算法方面有点无能为力。如果有人能修复我的函数,我将不胜感激,这样我就可以让它工作,并且可能对以后如何处理递归有更好的了解。
我的函数将布尔值的二维方阵、整数 i 和整数 array_size 作为参数。该函数返回一个布尔值。
数组是一个邻接矩阵,我用它来表示一组条件。例如,如果 [0][3] 处的值为真,则 0 -> 3(如果为 0,则为 3)。如果 [3][7] 为真,则 3 -> 7(如果为 3,则为 7)。通过传递性,0 -> 7(如果为 0,则为 7)。
整数 i 是条件集合中的一个特定元素。如果此元素可传递地连接到数组中的最后一个元素,则该函数将返回 true。数组的最后一个元素是整数(array_size - 1),
整数array_size是方阵每个维度的大小。如果 array_size 为 20,则数组为 20x20。
这个函数的思想是通过传递属性判断从第一个整数元素到最后一个整数元素是否有任何逻辑“路径”。当路径存在时,函数返回true,否则返回false。递归调用应该允许它遍历所有可能的路径,当它最终到达最后一个元素时返回 true,如果所有路径都失败则返回 false。
例如,如果 i = 0 且 array_size = 10,则函数将根据矩阵和传递属性提供的条件返回 0 -> 9 是否有效。
这是我目前的代码:
bool checkTransitivity(bool **relations, int i, int array_size){
bool isTransitive = false;
if (i == array_size - 1)
{
isTransitive = true;
}
else
{
for (int j = i; j < array_size; j++){
if (relations[i][j])
{
isTransitive = checkTransitivity(relations, j, array_size);
}
}
}
return isTransitive;
目前,该函数对所有输入都返回 true。
感谢任何帮助。提前致谢!
【问题讨论】:
-
您或许应该提供一个输入示例。事实上,代码不能总是返回 true。
标签: c++ arrays recursion adjacency-matrix