鱼C论坛

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

  38.     //初始化D和P
  39.     for (v = 0; v < head.numVertexes; v++){
  40.         for (w = 0; w < head.numVertexes; w++){
  41.             (*D)[v][w] = head.arc[v][w];
  42.             (*P)[v][w] = w;
  43.         }
  44.     }
  45.    
  46.     //优美的弗洛伊德算法
  47.     for (k = 0; k < head.numVertexes; k++) {
  48.         for (v = 0; v < head.numVertexes; v++) {
  49.             for (w = 0; w < head.numVertexes; w++) {
  50.                 if ((*D)[v][w] > (*D)[v][k] + (*D)[k][w]) {
  51.                     (*D)[v][w] = (*D)[v][k] + (*D)[k][w];
  52.                     (*P)[v][w] = (*P)[v][k];
  53.                 }
  54.             }
  55.         }
  56.     }
  57. }

  58. int main() {
  59.     MGraph head;
  60.     Pathatirx P;
  61.     ShortPathTable D;

  62.     Create_MGraph(&head);

  63.     ShortestFath_Floyd(head, 0, &P, &D);
  64. }
复制代码
achimg]
最佳答案
2023-2-22 21:55:26
ShortestFath_Floyd函数多传了一个参数,或者函数声明的时候你少写了一个参数
8F`2K5CF1KWYYWK7L@CINAP.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 21:55:26 | 显示全部楼层    本楼为最佳答案   
ShortestFath_Floyd函数多传了一个参数,或者函数声明的时候你少写了一个参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 18:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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