这个是什么原因呀。明明感觉没问题。怎么也不明白
166094#include <stdio.h>#include <stdlib.h>
#define scanf scanf_s
#define MAXVEX 16 // 最大顶点数
#define INFINITY 65535 // 用2的16次方来代表无穷大
typedef struct { // 邻接矩阵
char vexs; // 顶点表
int arc; // 邻接矩阵
int numVertexes, numEdges; // 图中当前的顶点数和边数
} MGraph;
typedef int Pathatirx; // 用于存储每条路径对应的长度
typedef int ShortPathTable; // 路径数组; 用于存储到下标代表的顶点到对应的点的最短路径
// 建立邻接矩阵
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);
getchar();//吸收换行符
}
for (i = 0; i < head->numVertexes; i++) {
for (j = 0; j < head->numVertexes; j++) {
head->arc = 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 = w;
head->arc = head->arc; // 因为是无向网图,对称矩阵
}
}
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) = head.arc;
(*P) = w;
}
}
//优美的弗洛伊德算法
for (k = 0; k < head.numVertexes; k++) {
for (v = 0; v < head.numVertexes; v++) {
for (w = 0; w < head.numVertexes; w++) {
if ((*D) > (*D) + (*D)) {
(*D) = (*D) + (*D);
(*P) = (*P);
}
}
}
}
}
int main() {
MGraph head;
Pathatirx P;
ShortPathTable D;
Create_MGraph(&head);
ShortestFath_Floyd(head, 0, &P, &D);
}achimg] ShortestFath_Floyd函数多传了一个参数,或者函数声明的时候你少写了一个参数
页:
[1]