我有一些作业,需要编写一个程序,给定一个表示邻接的矩阵。 用户需要将矩阵和索引放入,如果索引的两个值之间存在路径,则程序返回 true。 例如
0 1 2 3 4
1 0 1 0 0
2 0 0 1 0
3 0 0 0 0
4 0 0 0 0
如果用户提供此矩阵(没有索引编号)并给出值 3,1,则它返回 true,因为 3 是 2 的儿子,而 2 是 1 的儿子。但如果用户给出值 4,1,则返回 false。
#include <stdio.h>
#define N 11
#define TRUE 1
#define FALSE 0
int path(long int [][20] A, int u, int v)
{
if(u == 0 && A[u][v] == TRUE)
return TRUE;
if(u == 0 && A[u][v] == FALSE)
return FALSE;
if(A[u][v] == FALSE)
return path(A, u--, v);
else if(A[u][v] == TRUE)
return path(A, N, u);
}
int main()
{
int arr[11][11] = {{0,1,1,1,0,0,0,0,0,0,0},
{0,0,0,0,1,1,1,1,1,0,0},
{0,0,0,0,0,0,0,0,0,1,0},
{0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0}};
return path(arr,1,8);
return 0;
}
当我尝试在 gcc 上运行它时,它返回:
adjacency.c:8:26: error: expected ‘;’, ‘,’ or ‘)’ before ‘A’ adjacency.c: In function ‘main’: adjacency.c:30:1: warning: implicit declaration of function ‘path’ [-Wimplicit-function-declaration]
谁能告诉我为什么?如果我的程序能正常工作?? 谢谢大家
最佳答案
函数原型(prototype)与数组大小不匹配。
尝试改变
int path(long int [][20] A, int u, int v)
进入
int path(long int A[][11], int u, int v) // Move A
主要变化
int arr[11][11]
到
long int arr[11][11]
或者在函数中删除 long
int path(int A[][11], int u, int v)
顺便说一句:
return path(A, N, u);
可能不好,因为 N=11。您将在数组外部建立索引。
也许你想要
return path(A, N-1, u);
而不是避免索引超出范围的数组。
重要提示:
return path(A, u--, v);
可能需要:
return path(A, --u, v);
因为 u-- 是后递减。你将有一个无限循环,一次又一次地使用相同的值调用 path(..)。
您希望它在函数调用之前递减。所以使用 --u 因为它是一个预递减。
关于c - 数组类型具有不完整的元素类型邻接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29864537/