• 安阳旅游地图


    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. bool visited[MaxNum];
    106. for (int i = 0; i < MaxNum; i++) {
    107. visited[i] = false;
    108. }
    109. int NumVertex = 10;
    110. int NumEdge = 19;
    111. Graph* graph = Make_Graph(NumVertex, NumEdge);
    112. for (int i = 0; i < NumVertex; i++) {
    113. char* name = (char*)malloc(sizeof(char) * 100);
    114. printf("请输入%d号景点的名称:\n", i);
    115. scanf("%s", name);
    116. Add_Vertex_Data(graph, i, name);
    117. }
    118. for (int i = 0; i < NumEdge; i++) {
    119. int v1, v2, weight;
    120. printf("请输入两个景点的编号和距离:\n");
    121. scanf("%d %d %d", &v1, &v2, &weight);
    122. printf("从%d号景点到%d号景点的距离%d:\n", v1, v2, weight);
    123. Add_Edge(graph, v1, v2, weight);
    124. printf("\n\n");
    125. };
    126. view v[10];
    127. for(int i=0;i<10;i++){
    128. char*name=(char*)malloc(sizeof(char)*100);
    129. char*information=(char*)malloc(sizeof(char)*1000);
    130. printf("请输入景点名称:");
    131. scanf("%s",name);
    132. printf("请输入景点信息:");
    133. scanf("%s",information);
    134. enter(v,name,information,i);
    135. }
    136. printf("\n\n");
    137. int choice;
    138. int start;
    139. do{
    140. printf(" \n");
    141. printf(" \n");
    142. printf(" |-------------0殷墟------1袁林-------2中国文字博物馆 \n");
    143. printf(" | | | | \n");
    144. printf("6红旗渠------------ | | | \n");
    145. printf(" | | |---------------4羑里城----------- \n");
    146. printf(" | | | | | \n");
    147. printf(" | | | | | \n");
    148. printf("7太行大峡谷-------|-------------3长春观----------5岳飞庙------- | \n");
    149. printf(" | | | \n");
    150. printf(" | 8二帝陵 \n");
    151. printf(" | | \n");
    152. printf(" | | \n");
    153. printf(" |----------9明福寺 \n");
    154. printf(" \n");
    155. printf(" \n");
    156. printf("*******************************河南安阳旅游地图********************************\n");
    157. printf(" \n");
    158. printf(" 【1】景点名称及相关信息\n");
    159. printf(" 【2】深度遍历景点\n");
    160. printf(" 【3】获取最短路径\n");
    161. printf(" 请输入你的选项:\n");
    162. scanf("%d",&choice);
    163. printf("\n\n\n");
    164. if(choice==1){
    165. print_view(v);
    166. }
    167. if(choice==2){
    168. int num;
    169. printf("请输入作为遍历起点的景点编号:");
    170. scanf("%d",&num);
    171. DFS(graph, num, visit, visited);
    172. printf("\n");
    173. }
    174. if(choice==3){
    175. printf("请输入出发地地点编号:\n");
    176. scanf("%d", &start);
    177. dijkstra(graph, start, visited);
    178. printf("\n");
    179. }
    180. }while(choice!=0);
    181. return 0;
    182. }

    殷墟
    袁林
    文字博物馆
    长春观
    羑里城
    岳飞庙
    红旗渠
    太行大峡谷
    二帝陵
    明福寺
    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
    殷墟
    殷墟,河南安阳的商朝都城遗址,重要考古发现包括甲骨文,推动了中国信史进展。
    袁林
    袁林,又称袁坟,是清末民初政治家袁世凯的墓地,位于河南省安阳市。墓地规模宏大,建筑风格独特,是近现代重要史迹及代表性建筑。
    文字博物馆
    中国文字博物馆是一座位于河南省安阳市的国家级博物馆,以汉字为主题,展示汉字的起源、发展、演变和应用。博物馆旨在收藏、研究、展示和阐释中华优秀语言文化
    长春关
    河南安阳长春观,道教全真派宫观,历史悠久,明清建筑风格,供奉道教神祇。
    羑里城
    羑里城,位于河南安阳,是中国最古老的监狱之一,有“司法博物馆”之称。
    岳飞庙
    纪念南宋抗金名将岳飞,建筑精美,存有岳飞文物,为爱国主义教育场所。
    红旗渠
    红旗渠,位于河南林州,是新中国成立后人民自力更生、艰苦奋斗的典范,人工修建的大型灌区,被誉为“人工天河”。
    太行大峡谷
    太行大峡谷,位于河南林州,是太行山内的壮观峡谷,自然景观丰富,有“奇峰万矗”之美誉,是一处著名的自然风光旅游区。
    二帝陵
    二帝陵,位于河南省安阳市,是相传中华民族的人文始祖炎帝神农氏和黄帝轩辕氏的陵墓,是中华文明的重要遗迹。
    明福寺
    明福寺,位于中国河南省安阳市,是一座历史悠久的佛教寺庙,始建于唐代,经历代维修和扩建,寺内保存有珍贵的文物和佛教艺术品,是安阳市的重要佛教文化和历史遗迹。

    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[1000];
    16. char viewinformation[10000];
    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. system("cls");
    142. do{
    143. printf(" \n");
    144. printf(" \n");
    145. printf(" |-------------0殷墟------1袁林-------2中国文字博物馆 \n");
    146. printf(" | | | | \n");
    147. printf("6红旗渠------------ | | | \n");
    148. printf(" | | |---------------4羑里城----------- \n");
    149. printf(" | | | | | \n");
    150. printf(" | | | | | \n");
    151. printf("7太行大峡谷-------|-------------3长春观----------5岳飞庙------- | \n");
    152. printf(" | | | \n");
    153. printf(" | 8二帝陵 \n");
    154. printf(" | | \n");
    155. printf(" | | \n");
    156. printf(" |----------9明福寺 \n");
    157. printf(" \n");
    158. printf(" \n");
    159. printf("*******************************河南安阳旅游地图********************************\n");
    160. printf(" \n");
    161. printf(" 【1】景点名称及相关信息\n");
    162. printf(" 【2】深度遍历景点\n");
    163. printf(" 【3】获取最短路径\n");
    164. printf(" 【0】退出程序\n");
    165. printf(" 请输入你的选项:");
    166. scanf("%d",&choice);
    167. printf("\n\n\n");
    168. if(choice==1){
    169. print_view(v);
    170. printf("\n");
    171. }else if(choice==2){
    172. int num;
    173. printf("请输入作为遍历起点的景点编号:");
    174. scanf("%d",&num);
    175. DFS(graph, num, visit, visited);
    176. }else if(choice==3){
    177. printf("请输入出发地地点编号:");
    178. scanf("%d", &start);
    179. dijkstra(graph, start, visited);
    180. printf("\n");
    181. }else if(choice==0){
    182. printf("谢谢使用!\n");
    183. break;
    184. }else{
    185. printf("无效选择,请再次选择\n");
    186. }
    187. }while(choice!=0);
    188. fclose(fp);
    189. return 0;
    190. }

  • 相关阅读:
    超详细的文件上传和下载(Spring Boot)
    React几种避免子组件无效刷新的方案
    linux tasks errors
    学习c语言第24天(练习)
    AC发声:我踩过的坑 你们都(别再)踩了
    vue,Promise备忘
    【Git 全功能解析: 探索版本控制的强大工具】
    iOS 17.0 UIGraphicsBeginImageContextWithOptions 崩溃处理
    Linux操作系统(基础操作)
    ELK之Logstash启动异常:Logstash could not be started because there is already...
  • 原文地址:https://blog.csdn.net/2302_80380793/article/details/137886885