我是C的新手,知道一些Java。 尝试编写一个接受表示有向邻接矩阵的2D数组的程序,以及两个数字,扫描数组并返回true,如果它们之间存在有向路径(自上而下)。
我遇到了C实现的问题。显然我必须使用指向数组中值的指针,而在Java中,我可以使用数组中的值(比较,返回函数等)。
我很确定逻辑已经存在,我只需要帮助在正确的位置和数量分配'*。
以下是代码:
#include <stdio.h>
#define N 12
typedef int bool;
enum {false, true};
typedef struct adj_mat{
int A [N][N];
}adj_mat;
int path(struct adj_mat A, int origin, int dest){
int i;
if (origin == dest) return true;
for (i = 0; i < sizeof(A);i++){
if (A[origin][i]){
return path (A, i, dest);
}
}
return false;
}
提前致谢。
答案 0 :(得分:2)
for (i = 0; i < sizeof(A);i++){
这应该是for (i = 0; i < N; i++){
。
此外,您的算法可能无法终止,因为它没有处理图表中的周期。
答案 1 :(得分:0)
sizeof(A)
这可能不会给你你所期望的。它是字节数,而不是元素数。
A[origin][i]
在这里,您尝试索引无效的struct adjmat
。您可能想要为成员A
编制索引。尝试:
A.A[origin][i]
将adj_mat A
重命名为其他内容以避免混淆可能是个好主意。
您还应该将A
的地址传递给函数,并使用adj_mat*
作为参数类型。如果我理解正确,你希望递归操作同一个对象。