49 lines
1.1 KiB
C
49 lines
1.1 KiB
C
// include/graph.h
|
|
#ifndef GRAPH_H
|
|
#define GRAPH_H
|
|
|
|
#include <stdbool.h>
|
|
#include "station.h"
|
|
#include "route.h"
|
|
|
|
// 邻接表节点
|
|
typedef struct AdjNode {
|
|
int stationId;
|
|
int routeId;
|
|
double travelTime; // 行驶时间(分钟)
|
|
struct AdjNode* next;
|
|
} AdjNode;
|
|
|
|
// 邻接表
|
|
typedef struct AdjList {
|
|
AdjNode* head;
|
|
} AdjList;
|
|
|
|
// 图结构
|
|
typedef struct Graph {
|
|
AdjList adjLists[MAX_STATIONS];
|
|
int vertexCount;
|
|
} Graph;
|
|
|
|
// 路径节点
|
|
typedef struct PathNode {
|
|
int stationId;
|
|
int routeId;
|
|
double time;
|
|
struct PathNode* next;
|
|
} PathNode;
|
|
|
|
// 图操作函数
|
|
Graph* createGraph(int vertexCount);
|
|
void destroyGraph(Graph* graph);
|
|
void addEdge(Graph* graph, int from, int to, int routeId, double travelTime);
|
|
void buildGraphFromRoutes(Graph* graph, const BusRoute routes[], int routeCount,
|
|
const Station stations[], int stationCount);
|
|
|
|
// 路径查询函数
|
|
PathNode* dijkstra(Graph* graph, int start, int end, double* totalTime);
|
|
void freePath(PathNode* path);
|
|
void displayPath(PathNode* path, const Station stations[], int stationCount,
|
|
const BusRoute routes[], int routeCount);
|
|
|
|
#endif |