利用Floyed算法,求图的中心顶点 C语言 可以自动输入数据
时间: 2024-03-07 10:49:51 浏览: 122
好的,以下是一个基于Floyd算法求图中心顶点的C语言代码,可以自动输入数据:
```
#include <stdio.h>
#define MAX_VERTEX_NUM 100 // 图中最大的顶点数
int graph[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储图的邻接矩阵
int n; // 图中顶点数
void floyd() {
int i, j, k;
int max_distance, min_distance; // 最大距离和最小距离
int center_vertex = 0; // 中心点的编号
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (graph[i][j] > graph[i][k] + graph[k][j]) {
graph[i][j] = graph[i][k] + graph[k][j];
}
}
}
}
max_distance = 0;
for (i = 0; i < n; i++) {
min_distance = 0;
for (j = 0; j < n; j++) {
if (i != j) {
min_distance += graph[i][j];
}
}
if (min_distance > max_distance) {
max_distance = min_distance;
center_vertex = i;
}
}
printf("图的中心顶点为:%d\n", center_vertex);
}
int main() {
int i, j;
// 读入图的顶点数和邻接矩阵
printf("请输入图的顶点数:");
scanf("%d", &n);
printf("请输入邻接矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
if (i != j && graph[i][j] == 0) { // 如果两点之间没有直接路径,则将其距离设为一个较大值
graph[i][j] = 0x7fffffff;
}
}
}
floyd();
return 0;
}
```
该程序中,首先通过Floyd算法计算出任意两点之间的最短距离,然后对于每个顶点,计算它到其他顶点的距离之和,找到距离之和最小的顶点作为中心顶点。
阅读全文