train.h
上传用户:janny_wxd
上传日期:2010-02-03
资源大小:261k
文件大小:4k
源码类别:

控制台编程

开发平台:

C/C++

  1. #include"all.h"
  2. #define SIZE 10
  3. #define MAXSIZE 60
  4. #define maxint 32767
  5. //int MAXSIZE=25;
  6. typedef struct {
  7. int day;//天数
  8. int hour;//小时数
  9. int minute;//分钟数
  10. }time_train;
  11. typedef struct town{
  12. char name[9];//城镇名称
  13. time_train arrive;//火车到达时间
  14. time_train leave;//火车离站时间
  15. struct town *next_town;//下一个城镇
  16. }town;
  17. typedef struct train{
  18. char train_num[8];//火车序列号
  19. char start_place[9];//始发地
  20. char end_place[9];//终点站
  21. int fare;//费用
  22. int hour;//时间(用小时计算)
  23. struct train *next_train;//指向下一辆列车
  24. struct town *next_town;//指向下一个城镇
  25. }train;
  26. typedef struct{
  27. int length;//长度
  28. // int hour;//时间
  29. // int fare;//费用
  30. int ivex,jvex;//边的两端顶点号
  31. }path,*path_p;
  32. typedef struct path_node{
  33. path pa;//
  34. struct path_node *i_link,*j_link;
  35. }path_node,*path_node_p;
  36.  
  37. typedef struct {
  38. char city_name[9];
  39. path_node_p firsh_path;//指向第一条依附该顶点的边
  40. }city_node,*city_p;
  41. typedef struct {
  42. city_node adj_list[MAXSIZE];
  43. int city_num,path_num;
  44. }graph_country;
  45. typedef struct {
  46. int vx,vy;
  47. }Edge;
  48. typedef struct {
  49. Edge path[100];//路径中边的序列
  50. int len;//路径中边的数目
  51. }path_city;
  52. typedef struct {
  53. char citys[MAXSIZE][9];//路径中城市的序列
  54. int num;
  55. }p_city;//
  56. /********************火车的链表操作模块**************************/
  57. train *init_train();
  58. //初始化链表
  59. town *init_town();
  60. //初始化链表
  61. status insert_train(train *l, char *train_num,char *start_place,char *end_place,int fare,int hour);
  62. //火车链表的插入操作
  63. status insert_town(train *l,char *name,time_train arrive,time_train leave);
  64. //城市的插入操作
  65. status find_town(train *l,char *town);
  66. status find_train_num(train *l,char *train_num);
  67. //用火车序列号来查询
  68. status find_place(train *l,char *start_place,char *end_place,char choice);
  69. //用始发始发站和终点站来查询
  70. status creat_train(train *l);
  71. //内置数据来创建火车链表
  72. status creat_train_f(train *l);
  73. //用文件来创建火车链表
  74. status print_train(train *l);
  75. //打印火车信息,包括中转站
  76. /***********************火车的链表存储操作模块***********************/
  77. /**********************火车的图(多重邻接表)操作模块***********************/
  78. status insert_path(graph_country *l,path pa);
  79. status insert_city(graph_country *l,char *city_name,int i);
  80. status init_graph(graph_country *l);
  81. status creat_graph(graph_country *l);
  82. void get_city(graph_country l,int i, char *city_name);
  83. //以city_name返回邻接多重表中序号为i顶点的城市名
  84. path_node *first_path(graph_country l,int vi);
  85. //返回图中依附于顶点的第一条这的指针:l.adj_list [vi].firsh_path
  86. path_node * next_path(graph_country g,int vi,path_node p,int *vj,path_node *q);
  87. //以vj返回图g中依附于顶点vi的一条边(由指针p所指)的另一端点;
  88. //以q返回图中依附于顶点vi且相对于指针p所指边的下一条边
  89. status print_graph(graph_country g);
  90. //打印城市图的信息
  91. /**********************火车的图(多重邻接表)操作模块***********************/
  92. /***********************迪杰斯特拉算法实现模块****************************/
  93. void init_p(path_city *pa);
  94. //初始化为一条空路径
  95. void init_set(p_city *p);
  96. void copy_path(path_city *pa1,path_city *pa2);
  97. //复制路径
  98. void insert_p(path_city *pa,int v,int w);
  99. //在pa中插入一条边(v,w)
  100. int path_length(path_city *pa);
  101. //返回路径长度
  102. void out_path(graph_country l,path_city pa,p_city *citys,int nd);
  103. //将路径转换为城市名称的序列
  104. void putin_set(char *city_name,p_city *p,int st);
  105. //把city_name(序号为st的结点)放入
  106. void shortest_path(graph_country g,int st,int nd,int *pathlength,p_city *path_info);
  107. //利用迪杰斯特拉算法的基本思想求图g中从顶点st到顶点nd的一条最短路径
  108. //最短路径path_info及其路径长度path_lenth
  109. int minnal(int *dist,p_city ss);
  110. //求dist[]中的最小边
  111. /***********************迪杰斯特拉算法实现模块****************************/
  112. void train_main();
  113. //全国旅游交通查询的执行函数
  114. int city_name_int(graph_country l,char *name);
  115. //在城市与计算机储存序号之间建立一一映射