数组类型具有不完整的元素类型邻接

时间:2015-04-25 11:27:46

标签: c arrays adjacency-matrix

我得到了一些功课,需要编写一个程序,给出矩阵表示邻接。 如果索引的两个值之间存在路径,则用户需要将矩阵放入并且索引和程序返回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]

请告诉我为什么?如果我的程序甚至有效? 谢谢你们

1 个答案:

答案 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因为它是预先减少的。