请帮我用C语言编写一段数据结构城市交通系统,可以用图的结构来表示实际交通网络,顶点表示城市,边代表城市间的交通线路,边上权值表示线路花销(单位:百元)
时间: 2024-03-13 16:46:04 浏览: 56
c/数据结构课设——城市公交
好的,我可以为您提供一个简单的基于邻接矩阵的城市交通系统实现,使用C语言编写。
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CITY 10
#define INF 10000
typedef struct {
char name[20]; // 城市名称
} City;
typedef struct {
int cost; // 路线花销
} Edge;
typedef struct {
City cities[MAX_CITY]; // 城市列表
Edge edges[MAX_CITY][MAX_CITY]; // 邻接矩阵
int city_num; // 城市数量
} Graph;
// 初始化图
void initGraph(Graph *g) {
int i, j;
g->city_num = 0;
for (i = 0; i < MAX_CITY; i++) {
for (j = 0; j < MAX_CITY; j++) {
g->edges[i][j].cost = INF;
}
}
}
// 添加城市
void addCity(Graph *g, char *name) {
City city;
strcpy(city.name, name);
g->cities[g->city_num++] = city;
}
// 添加路线
void addRoute(Graph *g, int src, int dest, int cost) {
g->edges[src][dest].cost = cost;
g->edges[dest][src].cost = cost;
}
// 查找城市编号
int findCity(Graph *g, char *name) {
int i;
for (i = 0; i < g->city_num; i++) {
if (strcmp(g->cities[i].name, name) == 0) {
return i;
}
}
return -1;
}
// Dijkstra算法求最短路程
void dijkstra(Graph *g, int src, int *dist) {
int i, j, k, min;
int visited[MAX_CITY] = {0};
for (i = 0; i < g->city_num; i++) {
dist[i] = g->edges[src][i].cost;
}
visited[src] = 1;
for (i = 0; i < g->city_num - 1; i++) {
min = INF;
k = src;
for (j = 0; j < g->city_num; j++) {
if (!visited[j] && dist[j] < min) {
min = dist[j];
k = j;
}
}
visited[k] = 1;
for (j = 0; j < g->city_num; j++) {
if (!visited[j] && g->edges[k][j].cost != INF && dist[k] + g->edges[k][j].cost < dist[j]) {
dist[j] = dist[k] + g->edges[k][j].cost;
}
}
}
}
int main() {
Graph g;
int src, dest, i;
char city_name[20];
int dist[MAX_CITY];
initGraph(&g);
addCity(&g, "北京");
addCity(&g, "上海");
addCity(&g, "广州");
addCity(&g, "深圳");
addCity(&g, "杭州");
addRoute(&g, 0, 1, 600);
addRoute(&g, 0, 2, 700);
addRoute(&g, 0, 3, 800);
addRoute(&g, 1, 2, 500);
addRoute(&g, 1, 3, 600);
addRoute(&g, 2, 3, 300);
addRoute(&g, 2, 4, 400);
addRoute(&g, 3, 4, 350);
while (1) {
printf("请输入起点城市名称:");
scanf("%s", city_name);
src = findCity(&g, city_name);
if (src == -1) {
printf("城市不存在,请重新输入!\n");
continue;
}
printf("请输入终点城市名称:");
scanf("%s", city_name);
dest = findCity(&g, city_name);
if (dest == -1) {
printf("城市不存在,请重新输入!\n");
continue;
}
dijkstra(&g, src, dist);
printf("最短路程:%d百元\n", dist[dest]);
}
return 0;
}
```
该程序使用邻接矩阵表示城市交通网络,支持添加城市和路线,并使用Dijkstra算法求最短路程。您可以根据需要修改和扩展该程序,以实现更多功能。
阅读全文