/**
 * @file graph.h
 * @brief 图操作模块头文件
 *
 * 声明图的基本操作函数：创建网络拓扑图、打印邻接矩阵、文件IO。
 */

#ifndef GRAPH_H
#define GRAPH_H

#include "global.h"
#include "travels.h"

/* 全局邻接矩阵声明（定义在graph.c中，其他文件通过extern使用）*/
extern int **parray;
extern int visited[];

/**
 * @brief 创建网络拓扑图
 * @param graph 指向图结构的指针
 *
 * 硬编码8台设备10条链路，无需用户交互输入。
 * 包含设备名称、描述、端口数、备注，以及双向链路的延迟。
 */
void createGraph(ALGraph *graph);

/**
 * @brief 打印邻接矩阵（路由表）
 * @param graph 指向图结构的指针
 *
 * 将邻接表转换为邻接矩阵（二维数组），以表格形式输出所有设备之间的链路延迟。
 * 对角线为0，不可达显示为32767(INF)。
 */
void printGraph(ALGraph *graph);

/**
 * @brief 保存网络拓扑到文件
 * @param graph    指向图结构的指针
 * @param filename 文件名
 *
 * 文件格式：
 *   第1行：设备数n 链路数m
 *   接下来n行：设备名 描述 端口数 备注
 *   接下来m行：设备名1 设备名2 延迟
 */
void saveGraphToFile(ALGraph *graph, const char *filename);

/**
 * @brief 从文件加载网络拓扑
 * @param graph    指向图结构的指针
 * @param filename 文件名
 *
 * 读取saveGraphToFile格式的文件，自动构建邻接表。
 * 加载后需调用printGraph（选项2）构建邻接矩阵parray。
 */
void loadGraphFromFile(ALGraph *graph, const char *filename);

#endif /* GRAPH_H */
