我得到了一些功课,需要编写一个程序,给出矩阵表示邻接。 如果索引的两个值之间存在路径,则用户需要将矩阵放入并且索引和程序返回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:错误:预期';',','或')'在'A'之前 adjacency.c:在函数'main'中: adjacency.c:30:1:警告:函数'path'的隐式声明[-Wimplicit-function-declaration]
请告诉我为什么?如果我的程序甚至有效? 谢谢你们
答案 0 :(得分:1)
函数原型与数组大小不匹配。
尝试更改
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因为它是预先减少的。