输入形式】 一个正整数n,代表结点的个数,10≤n≤300 【输出形式】 一个正整数,代表结点 1 和结点 n 之间的最短路径长度。
时间: 2024-02-28 17:54:54 浏览: 55
输入一个正整数n,求输出为分数形式
5星 · 资源好评率100%
这是一个最短路径问题,可以使用Dijkstra算法或Floyd算法求解。
以下是使用Floyd算法的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define INF 1000000 // 定义无穷大
int graph[305][305]; // 存储图的邻接矩阵
void floyd(int n) {
// 初始化
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (graph[i][j] > graph[i][k] + graph[k][j]) {
graph[i][j] = graph[i][k] + graph[k][j];
}
}
}
}
}
int main() {
int n;
scanf("%d", &n);
// 初始化图的邻接矩阵
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == j) {
graph[i][j] = 0;
} else {
graph[i][j] = INF;
}
}
}
// 输入边信息
int m;
scanf("%d", &m);
for (int i = 0; i < m; i++) {
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
graph[u][v] = w;
graph[v][u] = w; // 如果是无向图,需要将两个方向都赋值
}
// 运行Floyd算法
floyd(n);
printf("%d\n", graph[1][n]);
return 0;
}
```
其中,输入参数n表示结点个数,输入参数m表示边的数量,输入格式为:
```
n
m
u1 v1 w1
u2 v2 w2
...
```
其中,每行表示一条边,ui、vi为边的端点,wi为边权。输出为结点1到结点n的最短路径长度。
阅读全文