Floyd算法直接使用二维数组求出所有顶点到所有顶点的最短路径。
D代表顶点到顶点的最短路径权值和的矩阵。
P代表对应顶点的最小路径的前驱矩阵。
以下程序在DEV C++中调试运行通过。
#include <stdio.h>
#define INFINITY 65535
typedef int VertexType; //顶点是字符型
typedef int EdgeType; //边是整型
typedef struct //图的邻接矩阵存储结构
{
VertexType vexs[9]; //顶点向量
EdgeType edges[9][9]; //邻接矩阵
int vexnum,arcnum; //图中当前的顶点数和边数
}MGraph;
/* 邻接矩阵的建立*/
void CreateGraph(MGraph *G)
{
int i,j,k,weight;
int ch1,ch2;
printf("请输入顶点数和边数(输入格式为:顶点数,边数):");
scanf("%d,%d",&(G->vexnum),&(G->arcnum));
printf("请输入顶点名称(输入格式为:a,b,c...):");
for(i=0;i<G->vexnum;i++)

本文介绍了如何使用C语言实现Floyd算法,该算法用于找到图中所有顶点之间的最短路径。在DEV C++环境中调试通过,程序时间复杂度为O(n^3)。在编写过程中遇到的错误是关于二维数组作为函数参数的不当使用,导致了"subscripted value is neither array nor pointer nor vector"的编译错误。在Dijkstra算法中,一维数组可以使用int*传递,但在Floyd算法中,二维数组需要正确处理其地址以避免此类错误。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



