用c语言写 TODO: Floyd求得两个顶点间最短路径 功能描述:用Floyd算法求出from到to两点最小路径并返回(from,to是用创建图时,存入的数组的下标表示) 参数说明:G-MGraph型指针参数 from-int型 最短路径开始顶点 to-int型 最短路径结束顶点 返回值说明:int型最短路径
时间: 2024-03-10 12:43:54 浏览: 69
任意两个顶点之间的最短路径_Floyd算法_C语言
4星 · 用户满意度95%
好的,以下是用C语言实现求解两个顶点间最短路径的Floyd算法的代码。假设已经定义了MGraph结构体和GetWeight函数来获取两个顶点之间的边的权值。
```c
typedef struct {
int vex[MAXVEX]; // 存储节点信息(如编号等)
int arc[MAXVEX][MAXVEX]; // 存储边的权值信息
int numVertexes, numEdges; // 节点数和边数
} MGraph;
int GetWeight(MGraph *G, int v, int w) {
return G->arc[v][w];
}
int ShortestPathFloyd(MGraph *G, int from, int to) {
int dist[MAXVEX][MAXVEX];
int i, j, k;
// 初始化dist数组
for (i = 0; i < G->numVertexes; i++) {
for (j = 0; j < G->numVertexes; j++) {
dist[i][j] = GetWeight(G, i, j);
}
}
// Floyd算法
for (k = 0; k < G->numVertexes; k++) {
for (i = 0; i < G->numVertexes; i++) {
for (j = 0; j < G->numVertexes; j++) {
if (dist[i][j] > dist[i][k] + dist[k][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
return dist[from][to];
}
```
使用方法如下:
```c
int main() {
MGraph G = {0};
// 初始化G
int from = 0, to = 5;
int shortestPath = ShortestPathFloyd(&G, from, to);
printf("Shortest path from %d to %d: %d\n", from, to, shortestPath);
return 0;
}
```
阅读全文