gpt4 book ai didi

c - 邻接矩阵查找邻居

转载 作者:行者123 更新时间:2023-11-30 17:15:49 24 4
gpt4 key购买 nike

我有一些看起来像这样的作业:

问题1(第一个程序adjacency.c文件)

有向树结构 T 有 N 个节点,由大小为 NxN 的邻接矩阵 A 表示,如下所示:

A [ u ] [ v] == TRUE 当且仅当 T 中存在从 u 到 v 的有向弧,或者换句话说:u 是 v 的父级。在此 example一棵有 N = 11 个节点的树。

我们获得以下neighboring matrix .

问题是:

  1. 您必须使用#define 命令和/或枚举 N 以及永久 TRUE 和 FALSE 进行定义。 Typedef 应使用名为 adj_mat 的字符进行设置,定义相邻矩阵大小 N。

  2. 您必须编写一个名为 path 的函数,该函数接受邻接矩阵 A 以及两个节点 u 和 v 的索引作为参数,并且当且仅当在交叉点处存在有向路径(通过方向箭头)时返回 TRUE u v,树由矩阵A表示。否则返回FALSE。

例如:路径(1,8)将返回TRUE。相同的路径 (1,3)。另一方面,路径 (3,8) 将为 FALSE。

  • 首先,您必须编写一个函数(main),定义一个变量类型 adj_mat,询问该矩阵的用户条目以及两个节点的索引。 main函数调用path函数,查看数据中两个节点之间是否存在有向路径。打印测试结果输出的函数。
  • 必须寻求一些帮助

    #include <stdio.h>

    #define N 11
    enum {FALSE, TRUE};
    typedef int adj_mat[N][N];

    int path2(adj_mat A, int u, int v, int temp)
    {
    if(u == temp && A[u][v] == FALSE)
    return TRUE;

    if(u == temp && A[u][v] == FALSE)
    return FALSE;

    if(A[u][v] == FALSE)
    return path2(A, u-1, v, temp);

    if(A[u][v] == TRUE)
    return path2(A, N, u, temp);

    return FALSE;
    }

    int path(adj_mat A, int u, int v)
    {
    return path2(A, N, v, u);
    }



    int main()
    {

    int arr[N][N]= {{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}};
    int u;
    int v;
    printf("please enter two numbers \n");
    scanf("%d %d", &u, &v);
    printf("The answer is %d", path(arr, u, v),".");
    return 0;
    }

    问题出在终端,当我输入 1,8 时它什么也不做。

    最佳答案

    您遇到了许多问题,尝试读取超出 arr 末尾的内容,导致未定义的行为。首先,当您声明一个包含 N = 11 元素的数组时,您的数组索引为 arr[0] - arr[10]。在 path 中考虑以下内容:

         return path2 (A, N, v, u);

    您将 A, N, v, u 作为参数传递给 path2:

    int path2 (adj_mat A, int u, int v, int temp)

    然后在path2中尝试A[u][v]错误,即A[11][v] 超出数组末尾。 (未定义的行为)。查看参数的顺序。 A 作为 A 传递到 path2N 作为 u 传递,vvutemp,使得 u = 11

    接下来,以下两项都不正确:

        if (u == temp && A[u][v] == FALSE)
    return TRUE;

    if (u == temp && A[u][v] == FALSE)
    return FALSE;

    你到底想做什么?还有,这是什么?

        printf("The answer is %d", path(arr, u, v),".");

    这甚至无法编译(见下文)。编译时,请确保启用警告,至少启用-Wall -Wextra,这将有助于指出代码中的问题。

    最后,请为用户提供有关允许数字范围的指导,并检查 scanf 返回:

        printf ("\n please enter two numbers (0-10): ");
    if (scanf (" %d %d", &u, &v) == 2)
    printf ("\n The answer is %d.\n", path (arr, u, v));
    else
    fprintf (stderr, "error: input failure.\n");

    我不评论你的逻辑是否正确,但你应该在进一步讨论之前解决上述问题。

    关于c - 邻接矩阵查找邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29866569/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com