首页 文章

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

提问于
浏览
1

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

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

1 回答

  • 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)
    

    BTW:

    return path(A, N, u);
    

    N = 11可能很糟糕 . 您将在数组外部编制索引 .

    也许你想要

    return path(A, N-1, u);
    

    相反,以避免索引数组超出范围 .

    IMPORTANT:

    return path(A, u--, v);
    

    可能需要:

    return path(A, --u, v);
    

    因为你是一个后减法 . 你将有一个无限循环调用路径(..)一次又一次地使用相同的值 .

    您希望它在函数调用之前递减 . 所以使用-u因为它是预先减少的 .

相关问题