当前位置:   article > 正文

安阳旅游地图规划(未完成)

安阳旅游地图规划(未完成)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5. #define MaxNum 10
  6. #define INFINITY 9999
  7. #define MaxStringLength 100
  8. typedef struct GNode {
  9. int NumVertex;
  10. int NumEdge;
  11. int Vertexs[MaxNum][MaxNum];
  12. char VertexData[MaxNum][MaxStringLength];
  13. } Graph;
  14. typedef struct view{
  15. char viewname[100];
  16. char viewinformation[1000];
  17. }view;
  18. void enter(view v[],char*name,char*information,int i){
  19. strcpy(v[i].viewname,name);
  20. strcpy(v[i].viewinformation,information);
  21. }
  22. void visit(Graph* graph, int vertex) {
  23. printf("%s ", graph->VertexData[vertex]);
  24. }
  25. Graph* Make_Graph(int NumVertex, int NumEdge) {
  26. Graph* graph = (Graph*)malloc(sizeof(Graph));
  27. graph->NumVertex = NumVertex;
  28. graph->NumEdge = 0;
  29. for (int i = 0; i < NumVertex; i++) {
  30. for (int j = 0; j < NumVertex; j++) {
  31. graph->Vertexs[i][j] = 0;
  32. }
  33. }
  34. return graph;
  35. }
  36. void Add_Edge(Graph* graph, int vertex1, int vertex2, int weight) {
  37. if (graph == NULL || graph->NumVertex == 0) {
  38. printf("error");
  39. return;
  40. }
  41. graph->Vertexs[vertex1][vertex2] = weight;
  42. graph->Vertexs[vertex2][vertex1] = weight;
  43. }
  44. void Add_Vertex_Data(Graph* graph, int vertex, char* name) {
  45. if (graph == NULL || vertex > graph->NumVertex - 1 || vertex < 0) {
  46. printf("error");
  47. return;
  48. }
  49. strcpy(graph->VertexData[vertex], name);
  50. }
  51. void DFS(Graph* graph, int vertex, void (*visit)(Graph*, int), bool visited[]) {
  52. visit(graph, vertex);
  53. visited[vertex] = true;
  54. for (int i = 0; i < graph->NumVertex; i++) {
  55. if (graph->Vertexs[vertex][i] != 0 && !visited[i] && graph->Vertexs[vertex][i] != INFINITY) {
  56. DFS(graph, i, visit, visited);
  57. }
  58. }
  59. }
  60. void dijkstra(Graph* graph, int start, bool visited[]) {
  61. int T[MaxNum][2];
  62. for (int i = 0; i < graph->NumVertex; i++) {
  63. T[i][0] = INFINITY;
  64. T[i][1] = -1;
  65. visited[i] = false;
  66. }
  67. T[start][0] = 0;
  68. T[start][1] = -1;
  69. for (int i = 0; i < graph->NumVertex - 1; i++) {
  70. int mindist = INFINITY;
  71. int minindex = -1;
  72. for (int j = 0; j < graph->NumVertex; j++) {
  73. if (!visited[j] && T[j][0] < mindist) {
  74. mindist = T[j][0];
  75. minindex = j;
  76. }
  77. }
  78. visited[minindex] = true;
  79. for (int k = 0; k < graph->NumVertex; k++) {
  80. if (!visited[k] && graph->Vertexs[minindex][k] != 0 && T[minindex][0] + graph->Vertexs[minindex][k] < T[k][0]) {
  81. T[k][0] = T[minindex][0] + graph->Vertexs[minindex][k];
  82. T[k][1] = minindex;
  83. }
  84. }
  85. }
  86. int end;
  87. printf("请输入目的地编号:");
  88. scanf("%d", &end);
  89. printf("距离为:%d\n", T[end][0]);
  90. printf("路线为:%d ", end);
  91. int temp = T[end][1];
  92. while (temp != -1) {
  93. printf("<- %d ", temp);
  94. temp = T[temp][1];
  95. }
  96. }
  97. int main() {
  98. FILE *fp;
  99. fp=fopen("data.txt","r");
  100. bool visited[MaxNum];
  101. for (int i = 0; i < MaxNum; i++) {
  102. visited[i] = false;
  103. }
  104. int NumVertex = 10;
  105. int NumEdge = 19;
  106. Graph* graph = Make_Graph(NumVertex, NumEdge);
  107. for (int i = 0; i < NumVertex; i++) {
  108. char* name = (char*)malloc(sizeof(char) * 100);
  109. printf("请输入%d号景点的名称:\n", i);
  110. fscanf(fp,"%s", name);
  111. Add_Vertex_Data(graph, i, name);
  112. }
  113. for (int i = 0; i < NumEdge; i++) {
  114. int v1, v2, weight;
  115. printf("请输入两个景点的编号和距离:\n");
  116. fscanf(fp,"%d %d %d", &v1, &v2, &weight);
  117. printf("从%d号景点到%d号景点的距离%d:\n", v1, v2, weight);
  118. Add_Edge(graph, v1, v2, weight);
  119. printf("\n");
  120. };
  121. for(int i=0;i<NumVertex;i++){
  122. char*name=(char*)malloc(sizeof(char)*100);
  123. char*information=(char*)malloc(sizeof(char)*1000);
  124. view v[10];
  125. fscanf(fp,"%s",name);
  126. fscanf(fp,"%d",information);
  127. enter(v,name,information,i);
  128. }
  129. for (int i = 0; i < graph->NumVertex; i++) {
  130. printf("%s\n", graph->VertexData[i]);
  131. }
  132. DFS(graph, 0, visit, visited);
  133. printf("\n\n");
  134. int start;
  135. system("cls");
  136. printf(" \n");
  137. printf(" \n");
  138. printf(" |-------------0殷墟------1袁林-------2中国文字博物馆 \n");
  139. printf(" | | | | \n");
  140. printf("6红旗渠------------ | | | \n");
  141. printf(" | | |---------------4羑里城----------- \n");
  142. printf(" | | | | | \n");
  143. printf(" | | | | | \n");
  144. printf("7太行大峡谷-------|-------------3长春观----------5岳飞庙------- | \n");
  145. printf(" | | \n");
  146. printf(" 8二帝陵 \n");
  147. printf(" | \n");
  148. printf(" | \n");
  149. printf(" 9明福寺 \n");
  150. printf(" \n");
  151. printf(" \n");
  152. printf(" \n");
  153. printf(" \n");
  154. int choice;
  155. do{
  156. scanf("%d",&choice);
  157. if(choice==1){
  158. }
  159. if(choice==2){
  160. }
  161. if(choice==3){
  162. }
  163. }while(choice!=0);
  164. printf("请输入出发地地点编号:");
  165. scanf("%d", &start);
  166. dijkstra(graph, start, visited);
  167. fclose(fp);
  168. return 0;
  169. }

殷墟

袁林

文字博物馆

长春观

羑里城

岳飞庙

红旗渠

太行大峡谷

二帝陵

明福寺
0 1 5
0 2 8
0 3 30
0 4 20
0 6 70
1 2 5
1 4 20
2 4 20
2 8 75
3 4 40
3 5 35
3 6 60
3 7 30
4 5 5
4 8 60
5 8 55
5 9 60
6 7 30
8 9 40

a
b
c
d
e
f
g
h
i
j
0 1 5
0 2 8
0 3 30
0 4 20
0 6 70
1 2 5
2 4 21
2 8 75
3 4 40
3 5 35
3 6 60
3 7 30
4 8 60
5 8 55
5 9 60
6 7 30
8 9 40

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5. #define MaxNum 10
  6. #define INFINITY 9999
  7. #define MaxStringLength 100
  8. typedef struct GNode {
  9. int NumVertex;
  10. int NumEdge;
  11. int Vertexs[MaxNum][MaxNum];
  12. char VertexData[MaxNum][MaxStringLength];
  13. } Graph;
  14. typedef struct view{
  15. char viewname[100];
  16. char viewinformation[1000];
  17. }view;
  18. void enter(view v[],char*name,char*information,int i){
  19. strcpy(v[i].viewname,name);
  20. strcpy(v[i].viewinformation,information);
  21. }
  22. void print_view(view v[]){
  23. for(int i=0;i<10;i++){
  24. printf("景点名称:%s\n",v[i].viewname);
  25. printf("景点介绍:%s\n",v[i].viewinformation);
  26. printf("\n");
  27. }
  28. }
  29. void visit(Graph* graph, int vertex) {
  30. printf("%s ", graph->VertexData[vertex]);
  31. }
  32. Graph* Make_Graph(int NumVertex, int NumEdge) {
  33. Graph* graph = (Graph*)malloc(sizeof(Graph));
  34. graph->NumVertex = NumVertex;
  35. graph->NumEdge = 0;
  36. for (int i = 0; i < NumVertex; i++) {
  37. for (int j = 0; j < NumVertex; j++) {
  38. graph->Vertexs[i][j] = 0;
  39. }
  40. }
  41. return graph;
  42. }
  43. void Add_Edge(Graph* graph, int vertex1, int vertex2, int weight) {
  44. if (graph == NULL || graph->NumVertex == 0) {
  45. printf("error");
  46. return;
  47. }
  48. graph->Vertexs[vertex1][vertex2] = weight;
  49. graph->Vertexs[vertex2][vertex1] = weight;
  50. }
  51. void Add_Vertex_Data(Graph* graph, int vertex, char* name) {
  52. if (graph == NULL || vertex > graph->NumVertex - 1 || vertex < 0) {
  53. printf("error");
  54. return;
  55. }
  56. strcpy(graph->VertexData[vertex], name);
  57. }
  58. void DFS(Graph* graph, int vertex, void (*visit)(Graph*, int), bool visited[]) {
  59. visit(graph, vertex);
  60. visited[vertex] = true;
  61. for (int i = 0; i < graph->NumVertex; i++) {
  62. if (graph->Vertexs[vertex][i] != 0 && !visited[i] && graph->Vertexs[vertex][i] != INFINITY) {
  63. DFS(graph, i, visit, visited);
  64. }
  65. }
  66. }
  67. void dijkstra(Graph* graph, int start, bool visited[]) {
  68. int T[MaxNum][2];
  69. for (int i = 0; i < graph->NumVertex; i++) {
  70. T[i][0] = INFINITY;
  71. T[i][1] = -1;
  72. visited[i] = false;
  73. }
  74. T[start][0] = 0;
  75. T[start][1] = -1;
  76. for (int i = 0; i < graph->NumVertex - 1; i++) {
  77. int mindist = INFINITY;
  78. int minindex = -1;
  79. for (int j = 0; j < graph->NumVertex; j++) {
  80. if (!visited[j] && T[j][0] < mindist) {
  81. mindist = T[j][0];
  82. minindex = j;
  83. }
  84. }
  85. visited[minindex] = true;
  86. for (int k = 0; k < graph->NumVertex; k++) {
  87. if (!visited[k] && graph->Vertexs[minindex][k] != 0 && T[minindex][0] + graph->Vertexs[minindex][k] < T[k][0]) {
  88. T[k][0] = T[minindex][0] + graph->Vertexs[minindex][k];
  89. T[k][1] = minindex;
  90. }
  91. }
  92. }
  93. int end;
  94. printf("请输入目的地编号:");
  95. scanf("%d", &end);
  96. printf("最短距离为:%dkm\n", T[end][0]);
  97. printf("最短路线为:%s ", graph->VertexData[end]);
  98. int temp = T[end][1];
  99. while (temp != -1) {
  100. printf("<- %s ", graph->VertexData[temp]);
  101. temp = T[temp][1];
  102. }
  103. }
  104. int main() {
  105. FILE *fp;
  106. fp=fopen("data.txt","r");
  107. bool visited[MaxNum];
  108. for (int i = 0; i < MaxNum; i++) {
  109. visited[i] = false;
  110. }
  111. int NumVertex = 10;
  112. int NumEdge = 19;
  113. Graph* graph = Make_Graph(NumVertex, NumEdge);
  114. for (int i = 0; i < NumVertex; i++) {
  115. char* name = (char*)malloc(sizeof(char) * 100);
  116. printf("请输入%d号景点的名称:\n", i);
  117. fscanf(fp,"%s", name);
  118. Add_Vertex_Data(graph, i, name);
  119. }
  120. for (int i = 0; i < NumEdge; i++) {
  121. int v1, v2, weight;
  122. printf("请输入两个景点的编号和距离:\n");
  123. fscanf(fp,"%d %d %d", &v1, &v2, &weight);
  124. printf("从%d号景点到%d号景点的距离%d:\n", v1, v2, weight);
  125. Add_Edge(graph, v1, v2, weight);
  126. printf("\n\n");
  127. };
  128. view v[10];
  129. for(int i=0;i<10;i++){
  130. char*name=(char*)malloc(sizeof(char)*100);
  131. char*information=(char*)malloc(sizeof(char)*1000);
  132. printf("请输入景点名称:");
  133. fscanf(fp,"%s",name);
  134. printf("请输入景点信息:");
  135. fscanf(fp,"%s",information);
  136. enter(v,name,information,i);
  137. }
  138. printf("\n\n");
  139. int choice;
  140. int start;
  141. do{
  142. printf(" \n");
  143. printf(" \n");
  144. printf(" |-------------0殷墟------1袁林-------2中国文字博物馆 \n");
  145. printf(" | | | | \n");
  146. printf("6红旗渠------------ | | | \n");
  147. printf(" | | |---------------4羑里城----------- \n");
  148. printf(" | | | | | \n");
  149. printf(" | | | | | \n");
  150. printf("7太行大峡谷-------|-------------3长春观----------5岳飞庙------- | \n");
  151. printf(" | | | \n");
  152. printf(" | 8二帝陵 \n");
  153. printf(" | | \n");
  154. printf(" | | \n");
  155. printf(" |----------9明福寺 \n");
  156. printf(" \n");
  157. printf(" \n");
  158. printf("*******************************河南安阳旅游地图********************************\n");
  159. printf(" \n");
  160. printf(" 【1】景点名称及相关信息\n");
  161. printf(" 【2】深度遍历景点\n");
  162. printf(" 【3】获取最短路径\n");
  163. printf(" 请输入你的选项:\n");
  164. scanf("%d",&choice);
  165. printf("\n\n\n");
  166. if(choice==1){
  167. print_view(v);
  168. printf("\n");
  169. }
  170. if(choice==2){
  171. int num;
  172. printf("请输入作为遍历起点的景点编号:");
  173. scanf("%d",&num);
  174. DFS(graph, num, visit, visited);
  175. printf("\n");
  176. }
  177. if(choice==3){
  178. printf("请输入出发地地点编号:\n");
  179. scanf("%d", &start);
  180. dijkstra(graph, start, visited);
  181. printf("\n");
  182. }
  183. }while(choice!=0);
  184. fclose(fp);
  185. return 0;
  186. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/476346
推荐阅读
相关标签
  

闽ICP备14008679号