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

控制台编程

开发平台:

C/C++

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #define OK 1
  5. #define TRUE 1
  6. #define FALSE 0
  7. #define ERROR 0
  8. #define OVERFLOW -2
  9. #define PR printf
  10. #define SIZE 10
  11. #define MAXSIZE 25
  12. #define maxint 32767
  13. typedef int status;
  14. typedef struct time_train{
  15. int day;
  16. int hour;
  17. int minute;
  18. }time_train;
  19. typedef struct town{
  20. char name[9];
  21. time_train arrive;
  22. time_train leave;
  23. struct town *next_town;
  24. }town;
  25. typedef struct train{
  26. char train_num[8];
  27. char start_place[9];
  28. char end_place[9];
  29. int fare;
  30. int hour;
  31. struct train *next_train;
  32. struct town *next_town;
  33. }train;
  34. typedef struct{
  35. int length;//长度
  36. // int hour;//时间
  37. // int fare;//费用
  38. int ivex,jvex;//
  39. }path,*path_p;
  40. typedef struct path_node{
  41. path pa;//
  42. struct path_node *i_link,*j_link;
  43. }path_node,*path_node_p;
  44.  
  45. typedef struct {
  46. char city_name[9];
  47. path_node_p firsh_path;
  48. }city_node,*city_p;
  49. typedef struct {
  50. city_node adj_list[MAXSIZE];
  51. int city_num,path_num;
  52. }graph_country;
  53. typedef struct {
  54. int vx,vy;
  55. }Edge;
  56. typedef struct {
  57. Edge path[100];//路径中边的序列
  58. int len;//路径中边的数目
  59. }path_city;
  60. typedef struct {
  61. char citys[MAXSIZE][9];//路径中城市的序列
  62. int num;
  63. }p_city;//
  64. train *init_train();//初始化链表
  65. town *init_town();
  66. status insert_train(train *l, char *train_num,char *start_place,char *end_place,int fare,int hour);
  67. status find_train_num(train *l,char *train_num);
  68. status find_place(train *l,char *start_place,char *end_place,char choice);
  69. status creat_train(train *l);
  70. status print_train(train *l);
  71. status insert_town(train *l, char *name,time_train arrive,time_train leave);
  72. status insert_path(graph_country *l,path pa);
  73. status insert_city(graph_country *l,char *city_name,int i);
  74. status init_graph(graph_country *l);
  75. status creat_graph(graph_country *l);
  76. void get_city(graph_country l,int i, char *city_name);
  77. //以city_name返回邻接多重表中序号为i顶点的城市名
  78. path_node *first_path(graph_country l,int vi);
  79. //返回图中依附于顶点的第一条这的指针:l.adj_list [vi].firsh_path
  80. path_node * next_path(graph_country g,int vi,path_node p,int *vj,path_node *q);
  81. //以vj返回图g中依附于顶点vi的一条边(由指针p所指)的另一端点;
  82. //以q返回图中依附于顶点vi且相对于指针p所指边的下一条边
  83. void init_p(path_city *pa);
  84. //初始化为一条空路径
  85. void init_set(p_city *p);
  86. void copy_path(path_city *pa1,path_city *pa2);
  87. //复制路径
  88. void insert_p(path_city *pa,int v,int w);
  89. //在pa中插入一条边(v,w)
  90. int path_length(path_city *pa);
  91. //返回路径长度
  92. void out_path(graph_country l,path_city pa,p_city *citys);
  93. //将路径转换为城市名称的序列
  94. void putin_set(char *city_name,p_city *p,int st);
  95. void shortest_path(graph_country g,int st,int nd,int *pathlength,p_city *path_info);
  96. //利用迪杰斯特拉算法的基本思想求图g中从顶点st到顶点nd的一条最短路径
  97. //最短路径path_info及其路径长度path_lenth
  98. int minnal(int *dist,p_city ss);
  99. //求dist[]中的最小边