鱼C论坛

 找回密码
 立即注册
查看: 1533|回复: 1

[已解决]这个是什么原因呀。明明感觉没问题。怎么也不明白

[复制链接]
发表于 2023-2-22 20:52:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[attachimg]166094[/att
#include <stdio.h>
#include <stdlib.h>

#define scanf scanf_s
#define MAXVEX 16                        // 最大顶点数
#define INFINITY 65535                // 用2的16次方来代表无穷大


typedef struct {    // 邻接矩阵
    char vexs[MAXVEX];                                // 顶点表
    int arc[MAXVEX][MAXVEX];                // 邻接矩阵
    int numVertexes, numEdges;                // 图中当前的顶点数和边数
} MGraph;

typedef int Pathatirx[MAXVEX][MAXVEX];    // 用于存储每条路径对应的长度
typedef int ShortPathTable[MAXVEX][MAXVEX]; // 路径数组; 用于存储到下标代表的顶点到对应的点的最短路径

// 建立邻接矩阵
void Create_MGraph(MGraph* head) {
    int i, j, k, w;

    printf("请输入顶点数和边数:\n");
    scanf("%d %d", &head->numVertexes, &head->numEdges);
    getchar();  //吸收换行符

    printf("请录入顶点名称:");
    for (i = 0; i < head->numVertexes; i++) {    //录入顶点
        scanf("%c", &head->vexs[i]);
        getchar();  //吸收换行符
    }

    for (i = 0; i < head->numVertexes; i++) {
        for (j = 0; j < head->numVertexes; j++) {
            head->arc[i][j] = INFINITY;                        // 邻接矩阵初始化
        }
    }

    printf("请输入边(i,j)的i,j和对应的权w;格式(i j w):\n");
    for (k = 0; k < head->numEdges; k++) {
        scanf("%d %d %d", &i, &j, &w);
        head->arc[i][j] = w;
        head->arc[j][i] = head->arc[i][j];                        // 因为是无向网图,对称矩阵
    }
}


void ShortestFath_Floyd(MGraph head, Pathatirx *P, ShortPathTable *D) {
    int v, w, k;

    //初始化D和P
    for (v = 0; v < head.numVertexes; v++){
        for (w = 0; w < head.numVertexes; w++){
            (*D)[v][w] = head.arc[v][w];
            (*P)[v][w] = w;
        }
    }
    
    //优美的弗洛伊德算法
    for (k = 0; k < head.numVertexes; k++) {
        for (v = 0; v < head.numVertexes; v++) {
            for (w = 0; w < head.numVertexes; w++) {
                if ((*D)[v][w] > (*D)[v][k] + (*D)[k][w]) {
                    (*D)[v][w] = (*D)[v][k] + (*D)[k][w];
                    (*P)[v][w] = (*P)[v][k];
                }
            }
        }
    }
}

int main() {
    MGraph head;
    Pathatirx P;
    ShortPathTable D;

    Create_MGraph(&head);

    ShortestFath_Floyd(head, 0, &P, &D);
}
achimg]
最佳答案
2023-2-22 21:55:26
ShortestFath_Floyd函数多传了一个参数,或者函数声明的时候你少写了一个参数
8F`2K5CF1KWYYWK7L@CINAP.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 21:55:26 | 显示全部楼层    本楼为最佳答案   
ShortestFath_Floyd函数多传了一个参数,或者函数声明的时候你少写了一个参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表