地铁建设问题C语言
c语言实现迪杰斯特拉算法实例

c语言实现迪杰斯特拉算法实例========迪杰斯特拉算法是一种用于求解单源最短路径问题的算法,它使用Dijkstra 算法的思想,通过不断更新最短路径值,最终找到源节点到所有其他节点的最短路径。
下面是一个使用C语言实现迪杰斯特拉算法的实例。
一、算法概述------迪杰斯特拉算法的基本思想是:从源节点开始,不断更新与源节点相邻的节点之间的最短路径值,直到所有节点都被处理完毕。
算法的核心是使用一个最小堆来存储待处理的节点及其对应的距离值,每次从最小堆中取出距离值最小的节点,并更新与其相邻节点的距离值。
二、代码实现------以下是一个使用C语言实现迪杰斯特拉算法的示例代码:```c#include <stdio.h>#include <stdlib.h>#include <limits.h>#define MAX_NODES 100 // 最大节点数#define INF 0x3f3f3f3f // 无穷大值typedef struct Node {int id; // 节点编号int distance; // 到源节点的距离struct Node* nxt; // 指向下一个节点的指针(用于广度优先搜索)} Node;// 创建新节点Node* create_node(int id) {Node* node = (Node*)malloc(sizeof(Node));node->id = id;node->distance = INF;node->nxt = NULL;return node;}// 将节点添加到最小堆中(假设堆为head)void add_node_to_heap(Node** head, int* size, int distance) {Node* node = create_node(distance); // 创建新节点(*size)++; // 节点数加一(*head)->distance = distance; // 将新节点距离设置为最小值(*head)->nxt = node; // 将新节点添加到堆中while (*head->nxt != NULL && (*head->nxt)->distance < (*head)->distance) { // 调整堆中距离值最小节点的位置Node* temp = *head->nxt; // 保存当前距离最小的节点(*head)->nxt = (*head->nxt)->nxt; // 将当前节点的下一个节点向前移动一位(退出循环)free(temp); // 释放当前节点的内存空间(释放内存)}}// 从最小堆中取出距离值最小的节点(返回值为距离值)int extract_min(Node** head, int* size) {Node* temp = *head; // 保存当前距离最小的节点(用于后续更新)int min_distance = temp->distance; // 当前最小距离值(用于后续更新)Node** p = *head; // 指向当前距离最小的节点的指针(用于后续更新)while (p->nxt != NULL && p->distance > min_distance) { // 从堆中取出距离值最小的节点,并更新指针和距离值Node* next_node = p->nxt; // 保存下一个节点指针(用于广度优先搜索)*p = p->nxt->nxt; // 将当前节点的下一个节点向前移动一位(退出循环)p->distance = min_distance; // 将当前节点的距离值更新为当前最小值free(next_node); // 释放下一个节点的内存空间(释放内存)}*head = p->nxt; // 将当前节点的下一个节点设置为堆头指针(进入下一轮循环)*size--; // 删除已处理节点数减一(返回最小距离值)return min_distance; // 返回最小距离值(作为结果返回)}// 迪杰斯特拉算法主函数(源代码)void dijkstra(int nodes, int start_node, Node** nodes_list) {int size = nodes; // 初始化节点数和距离数组大小为0(初始化)Node* heap = (Node*)malloc(sizeof(Node) * size); // 创建最小堆(初始化)for (int i = 0; i < size; i++) { // 将所有节点添加到堆中,并设置其距离值为无穷大(进入主循环)add_。
c语言课程设计地铁

c语言课程设计地铁一、教学目标本节课的教学目标是让学生掌握C语言的基本语法和编程技巧,通过编写程序模拟地铁运行系统,培养学生的逻辑思维能力和实际问题解决能力。
具体分为以下三个部分:1.知识目标:使学生了解C语言的基本数据类型、运算符、控制结构等语法知识,理解函数的定义和调用方法。
2.技能目标:培养学生具备运用C语言编写程序的能力,能够独立完成简单的程序设计任务。
3.情感态度价值观目标:激发学生对计算机科学的兴趣,培养他们勇于探索、创新的精神,提高学生团队协作和沟通的能力。
二、教学内容本节课的教学内容主要包括以下几个部分:1.C语言基本语法:数据类型、变量、运算符、控制结构等。
2.函数的定义和调用:函数的声明、定义、参数传递、返回值等。
3.地铁运行系统模拟:编写程序模拟地铁的运行,包括站点、列车、乘客等。
4.程序调试与优化:学会使用调试工具,分析程序运行过程中的问题,优化程序性能。
三、教学方法为了提高教学效果,本节课将采用以下几种教学方法:1.讲授法:讲解C语言的基本语法和编程技巧,让学生掌握必要的理论知识。
2.案例分析法:分析实际案例,让学生了解地铁运行系统的原理,引导学生运用所学知识解决实际问题。
3.实验法:让学生动手编写程序,模拟地铁运行,培养学生的实际操作能力和问题解决能力。
4.讨论法:学生进行小组讨论,分享学习心得和编程经验,提高学生的沟通能力和团队协作精神。
四、教学资源为了支持本节课的教学内容和教学方法,我们将准备以下教学资源:1.教材:《C程序设计语言》或《C语言入门教程》等。
2.参考书:《C语言编程实践》、《C语言深度探索》等。
3.多媒体资料:教学PPT、视频教程、在线编程练习平台等。
4.实验设备:计算机、编程软件(如Code::Blocks、Visual Studio等)、网络等。
通过以上教学资源,为学生提供丰富的学习渠道和实践机会,帮助他们更好地掌握C语言编程技能。
五、教学评估本节课的教学评估将采用多元化的评价方式,全面、客观地评价学生的学习成果。
《数据结构c语言》车厢调度问题解析(经典递归)

车厢调度问题解析(经典递归)博客分类:zhanghonglun算法算法题目假设停在铁路调度站入口处的车厢系列的编号依次为1,2,3,…n。
设计一个程序,求出所有可能由此输出的长度为n 的车厢系列。
解析:一个数的进栈以后,有两种处理方式:要么立刻出栈,或者下一个数的进栈(如果还有下一个元素)其出栈以后,也有两种处理方式:要么继续出栈(栈不为空),或者下一个数的入栈。
该问题有天然的递归性质算法设计:两重递归,下一个元素处理完后返回,再处理出栈的递归,有点像嵌套循环,但比它复杂...进栈的递归跳出条件为最后一个元素进栈出栈的递归跳出条件为栈空附上经典实现代码C代码1.#include<stdafx.h>2.#include<stdio.h>3.#define MaxLen 1004.struct snode{5. int data[MaxLen];6. int top;7.}s;//定义一个栈指针8.int n;//定义输入序列总个数9.void Initstack()10.{11. s.top=-1;12.}13.void push(int q)//元素n进栈14.{15. s.top++;16. s.data[s.top]=q;17.}18.int pop()//出栈19.{20. int temp;21. temp=s.data[s.top];22. s.top--;23. return temp;24.}25.int Emptys()//判断栈空26.{27. if(s.top==-1)28. return 1;29. else30. return 0;31.}32./*33.每次调用求值阶段包含两重递归,只有全部返回,才表示本pos 处理完,可以对上一个元素求值,process 就是找出当前元素进栈后所有可能的操作,即在当前元素进栈后各种情况下,34.包括不出栈,立即出栈,出栈后继续出栈情况(出栈递归)下,继续处理下一个元素(入栈递归)35.36.*/37.void process(int pos,int path[],int curp)//当前处理位置pos的元素38.{39. int m,i;40. if(pos<n)//编号进栈递归41. {42. push(pos+1);//当前元素进栈后下一个元素继续进栈43. process(pos+1,path,curp); //处理下一个元素,返回表明下一个元素进栈的情况处理完了44. pop(); //下一个元素处理完后,pop 掉,准备处理直接出栈45. }46.47. if(!Emptys())//递归处理出栈48. {49. m=pop();50. path[curp]=m;51. curp++;52. process(pos,path,curp);//出栈后处理下一个素继续进栈53. push(m);54. }55. if(pos==n&&Emptys())//输出一种可能的方案56. {57. for(i=0;i<curp;i++)58. printf("%2d",path[i]);59. printf("\n");60. }61.}62.void main()63.{64. int path[MaxLen];65. printf("输入要调度车厢总数:");66. scanf("%d",&n);67. Initstack();68. push(1);69. printf("所有输出序列:\n");70. process(1,path,0); //从1 开始,递归处理所有元素71.}。
-地铁建设问题

地铁建设问题1、问题的定义与描述1.1、问题定义:地铁建设问题1.2、问题描述:某城市要在其各个辖区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要合理安排地铁的建设路线,使程客可以沿地铁到达各个辖区,并使总的建设费用最小。
图1-1 各区距离图2、关键技术2.1 从包含各辖区的地图文件中读入辖区名称和各辖区间的距离。
2.2 根据读入的各辖区的距离信息,计算出应该建设哪些辖区间的地铁路线。
2.3 输出应该建设的地铁路线及所需建设的总里程信息。
3、数据的组织3.1 数据结构定义:本课程设计使用的数据结构是无向图,无向图采用邻接矩阵作为存储结构。
3.2数据定义:3.2.1、站点(顶点)结构定义:3.3、数据类型定义:(1)在计算的过程中除要读取数(用字符数组表示,设其最大长度不超过50)外,还要读入各顶点的边的权值(权值设一默认最大值为60000计算需要,当两地没有可建路线时)。
同时还要输出汉字表示的路段,有用字符串。
故定义头文件、常量、顶点数及权值数据类型如下:#include"stdio.h"#include"string.h"#define MAXVEX 50 /*顶点数最大值*/#define MAXWEIGHT 60000 /*若顶点间无路径,则以此最大值表示不通*/typedef int weight;(2)每一个顶点由顶点号(初始从0开始)和站点名称组成。
顶点号为整型,顶点名称则为字符数组。
顶点总体定义为结构体类型。
/*顶点(站点)的数据类型*/typedef struct{int no;char name[100];}DataType;(3)定义邻接矩阵,邻接边由weight型的二维数组,顶点为DataType类型,记录总顶点数的vexs。
typedef struct{weight arcs[MAXVEX][MAXVEX];DataType data[MAXVEX];int vexs;}MGraph,*AdjMatrix;(4)在定义一DataType类型的数组,用来存放顶点的信息(顶点号和顶点名称),然后定义一long类型的用来存放各铁路的权值,这两个数组用来创建邻接距阵时为邻接矩阵赋值。
C语言智能交通系统设计

C语言智能交通系统设计智能交通系统设计是当今社会发展的一个重要方向,通过利用先进的技术手段来提高交通系统的效率和安全性。
在这个过程中,C语言作为一种高效、灵活的编程语言,可以帮助我们实现智能交通系统的设计。
首先,我们需要定义智能交通系统的功能需求。
智能交通系统主要包括交通信号控制、车辆识别与跟踪、交通数据分析等功能。
在C语言中,我们可以利用各种数据结构和算法来实现这些功能。
比如,可以使用链表来存储车辆信息,使用队列来实现信号灯控制等。
其次,我们需要设计智能交通系统的架构。
在C语言中,可以通过模块化的方式来设计系统架构,将不同功能分解成多个模块,然后通过接口来实现它们之间的通信和数据交换。
这样可以提高系统的可维护性和扩展性。
接着,我们需要实现交通信号控制模块。
在C语言中,可以使用多线程来实现不同方向的交通信号控制,保证交通流畅。
同时,可以利用定时器来定时切换信号灯状态,实现交通信号的周期性控制。
此外,车辆识别与跟踪也是智能交通系统的重要功能之一。
在C语言中,可以利用图像处理技术来实现车辆识别,然后通过目标跟踪算法来实现车辆的跟踪。
通过这样的方式,可以实现对车辆行驶路线的实时监控与管理。
最后,交通数据分析模块也是智能交通系统不可或缺的一部分。
在C语言中,可以使用数据结构和算法来对交通数据进行分析,比如计算车辆平均速度、拥堵指数等,为交通系统的优化提供数据支持。
综上所述,通过在C语言中实现智能交通系统的设计,可以提高交通系统的效率和安全性,为城市交通管理带来新的机遇和挑战。
希望以上内容能帮助您更好地理解C语言智能交通系统设计的相关知识。
如果有更多问题,欢迎继续咨询!。
2021年数学建模c题

2021年数学建模c题
2021年数学建模C题:
题目:
题目描述:在某城市中,为了缓解交通压力,计划修建一条地铁线路。
该线路需要经过多个站点,并需要在每个站点设置停车位。
任务:
1. 根据给定的站点和停车位需求,为每个站点分配停车位,并确定所需的总停车位数。
2. 考虑到站点之间的距离和停车位的需求,为每个站点设计合理的停车位布局。
3. 分析停车位数量和站点数量之间的关系,以及站点之间距离对停车位布局的影响。
数据:
1. 给定每个站点的停车位需求(单位:个):[30, 40, 50, 60, 70, 80, 90, 100, 110, 120]
2. 给定每个站点之间的距离(单位:km):[[0, 2, 3, 4], [2, 0, 2, 3], [3, 2, 0, 1], [4, 3, 1, 0]]
注意:以上数据仅为示例,实际数据可能有所不同。
要求:
1. 根据给定的数据,为每个站点分配停车位,并确定所需的总停车位数。
2. 为每个站点设计合理的停车位布局,并给出布局示意图。
3. 分析停车位数量和站点数量之间的关系,以及站点之间距离对停车位布局的影响。
4. 给出优化建议,以提高地铁线路的运营效率。
C语言课程设计论文(建筑工地信息管理系统)

目录课程设计评语.................................................................................................... 错误!未定义书签。
目录 (1)1.课程论文题目................................................................................................. 错误!未定义书签。
2.程序设计思路................................................................................................. 错误!未定义书签。
3.功能模块图..................................................................................................... 错误!未定义书签。
4.程序代码 (4)5.程序运行结果 (24)6.编程中遇到的困难及解决方法.................................................................. 2错误!未定义书签。
7.总结心得及良好建议 (28)8.致谢 ............................................................................................................. 2错误!未定义书签。
9.参考文献...................................................................................................... 2错误!未定义书签。
数据结构课程设计_地铁建设问题

数据结构课程设计_地铁建设问题地铁建设问题是一个涉及到城市交通规划和基础设施建设的重要议题。
在数据结构课程设计中,我们将探讨如何利用合适的数据结构和算法来解决地铁建设问题。
一、问题描述在城市规划中,地铁系统的建设是一个复杂而关键的任务。
我们需要设计一个程序,能够根据给定的城市地图和站点信息,实现以下功能:1. 添加地铁路线:能够添加新的地铁路线,并指定每一个站点的名称和位置。
2. 添加地铁站点:能够在已有的地铁路线上添加新的站点,并指定站点的名称和位置。
3. 查询地铁路线:能够根据路线名称查询该路线的所有站点信息。
4. 查询地铁站点:能够根据站点名称查询该站点所属的所有路线信息。
5. 查询两个站点之间的最短路径:能够根据给定的起点和终点站点,计算出两个站点之间的最短路径,并输出经过的所有站点。
二、数据结构设计为了实现上述功能,我们可以使用以下数据结构:1. 图(Graph):用于表示整个地铁网络,每一个站点作为图的一个节点,站点之间的连接关系作为图的边。
2. 邻接表(Adjacency List):用于表示每一个站点的邻接站点,方便查询某个站点的相邻站点。
3. 最短路径算法(Dijkstra算法):用于计算两个站点之间的最短路径。
三、算法设计1. 添加地铁路线:根据输入的路线名称和站点信息,将新的路线添加到地铁网络中。
2. 添加地铁站点:根据输入的站点名称和位置,将新的站点添加到指定的地铁路线中,并更新相邻站点的连接关系。
3. 查询地铁路线:根据输入的路线名称,遍历地铁网络,找到该路线的所有站点信息,并输出。
4. 查询地铁站点:根据输入的站点名称,遍历地铁网络,找到该站点所属的所有路线信息,并输出。
5. 查询两个站点之间的最短路径:根据输入的起点和终点站点,利用Dijkstra 算法计算最短路径,并输出经过的所有站点。
四、实现步骤1. 定义图(Graph)数据结构,包括节点和边的定义,以及相关的操作方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件学院课程设计报告书课程名称数据结构设计题目地铁建设问题专业班级软件13-9班学号 1320010904 姓名 XXXXXX 指导教师 XXXXXX2015年01 月目录1 设计时间 (1)2 设计目的 (1)3 设计任务 (1)4 设计内容 (1)4.1需求分析 (1)4.2总体设计 (1)4.2.1本程序中用到的所有抽象数据类型的定义 (1)4.2.2主程序的流程 (2)4.2.3各模块之间的层次调用关系 (3)4.3详细设计 (4)4.3.1数据类型的定义 (4)4.3.2主要函数及其伪码 (4)4.3.3函数的调用关系图 (7)4.4测试与分析 (7)4.4.1测试 (7)4.4.2分析 (9)4.5 附录 (9)5 总结与展望 (15)1 设计时间2015年1月18日到2015年1月22日2 设计目的通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
训练C程序调试能力,能将一个中小型各级组织系统联调通过。
开发一个中小型系统,掌握系统研发全过程。
培养分析问题、解决实际问题的能力。
3设计任务某城市要在各个辖区之间修建地铁,由于地铁建设费用昂贵,因此需要合理安排地铁建设线路,使市民可以沿地铁到达各个辖区,并使总费用最小。
4 设计内容4.1需求分析设计思路:(1)先输入辖区的个数,然后输入各个辖区名称,再输入边的条数,最后输入各辖区间直接距离(地铁铺设费用与距离成正比)。
(2)根据辖区距离信息,计算出应该在哪些辖区建立地铁线路。
(3)输出应该建设的地铁线路及所需建设总里程。
4.2总体设计4.2.1本程序中用到的所有抽象数据类型的定义:typedef struct AA{int number;int weight;struct AA *next;}Node;//邻接表的结点typedef struct{char name[30];Node *next;}Graph;//邻接表的表头结点typedef struct{int begin;int end;int weight;}min_tree;//存储树的三元组4.2.2主程序的流程图1 主程序的流程4.2.3各模块之间的层次调用关系。
图2 各模块之间的层次调用关系4.3详细设计4.3.1数据类型的定义typedef struct AA{int number;int weight;struct AA *next;}Node;//邻接表的结点typedef struct{char name[30];Node *next;}Graph;//邻接表的表头结点typedef struct{int begin;int end;int weight;}min_tree;//存储树的三元组4.3.2主要函数及其伪码int seek_i(Graph metro[],int length,char str[]){int i;for(i=1;i<=length;i++)if(strcmp(str,metro[i].name)==0)break;if(i>length)return 0;elsereturn i;}void plim(Graph metro[],int length,int ver,min_tree min_t[])//普利姆算法{/*前置条件:metro为图的邻接表,length为其长度,ver为要开始的序号,min_t 为三元组的空表。
后置条件:min_t储存最小生成树的三元组。
*/struct BB{int vertex;//结点的序号int short_distance;//从short_distance为0的顶点到不为0的顶点的最短距离}*assist=(struct BB *)malloc((length+1)*sizeof(struct BB));//辅助数组/*---------初始化辅助数组----------*/for(i=0;i<=length;i++){assist[i].short_distance=WEIGHT_MAX;assist[i].vertex=0;}/*----------加入ver的结点------------*/assist[ver].short_distance=0;p=metro[ver].next;while(p){assist[p->number].short_distance=p->weight;assist[p->number].vertex=ver;p=p->next;}int min_t_length=0;//assist中short_distance域为0的个数for(i=1;i<length;i++){int min=0,j;for(j=1;j<=length;j++){if(assist[j].short_distance!=0&&assist[j].short_distance<assist[min].short_distance) min=j;}//找出assist中short_distance域除0外最小值的序号/*----------把序号为min的信息存入三元组中------------*/min_t_length++;min_t[min_t_length].begin=min;min_t[min_t_length].end=assist[min].vertex;min_t[min_t_length].weight=assist[min].short_distance;/*---------------修改assist数组----------*/assist[min].short_distance=0;p=metro[min].next;while(p){if(assist[p->number].short_distance!=0&&p->weight<assist[p->number].short_distance) {assist[p->number].vertex=min;assist[p->number].short_distance=p->weight;}p=p->next;}}}4.3.3函数的调用关系图。
图3函数的调用关系图。
4.4测试与分析4.4.1测试4.4.2分析由于我一边调试一边编程,所以编程结束时调试程序并没有用多少时间,更多的时间用在了测试上,分析普里姆算法,假设网中有n个定点,则第一个进行初始化的循环语句的频率为n,第二个循环语句的频率为n-1。
其中有两个内循环:其一是在assist[v].short_distance中求最小值,,其频率为n-1;其二是重新选择具有最小代价的变量,其频度为n。
由此,普里姆算法的时间复杂度为O(n*n),与网中的遍数无关。
利用PRIM算法生成最小生成树时,求第k次的最短边共需比较2(n-k)-1次,即时间复杂度为O(n-k)。
4.5 附录#include<stdio.h>#include<malloc.h>#include<string.h>#define NAME_MAX 30//姓名的最大长度#define WEIGHT_MAX 30000//最大权值typedef struct AA{int number;int weight;struct AA *next;}Node;//邻接表的结点typedef struct{char name[30];Node *next;}Graph;//邻接表的表头结点typedef struct{int begin;int end;int weight;}min_tree;//存储树的三元组,int seek_i(Graph metro[],int length,char str[]){/*前提条件:metro为一图的邻接表,length为表的长度,str为一不为空的字符串后置条件:若metro中的name域存在与str相同的字符串则返回第几个,不存在返回0*/int i;for(i=1;i<=length;i++)if(strcmp(str,metro[i].name)==0)break;if(i>length)return 0;elsereturn i;}void append_(Graph &G,int w,int weight){/*前置条件:G为邻接表的一个结点,w与weight为要插入的结点的数据域后置条件:把w与weight组成一个结点并插入表头结点G中*/Node *s=(Node *)malloc(sizeof(Node));s->number=w;s->weight=weight;//s为w和weight所组成的一个结点。
s->next=G.next;G.next=s;}void plim(Graph metro[],int length,int ver,min_tree min_t[])//普利姆算法{/*前置条件:metro为图的邻接表,length为其长度,ver为要开始的序号,min_t为三元组的空表。
后置条件:min_t储存最小生成树的三元组。
*/struct BB{int vertex;//结点的序号int short_distance;//从short_distance为0的顶点到不为0的顶点的最短距离}*assist=(struct BB *)malloc((length+1)*sizeof(struct BB));//辅助数组/*---------初始化辅助数组----------*/int i;for(i=0;i<=length;i++){assist[i].short_distance=WEIGHT_MAX;assist[i].vertex=0;}/*----------加入ver的结点------------*/assist[ver].short_distance=0;Node *p;p=metro[ver].next;while(p){assist[p->number].short_distance=p->weight;assist[p->number].vertex=ver;p=p->next;}int min_t_length=0;//assist中short_distance域为0的个数for(i=1;i<length;i++){int min=0,j;for(j=1;j<=length;j++){if(assist[j].short_distance!=0&&assist[j].short_distance<assist[min].short_distance) min=j;}//找出assist中short_distance域除0外最小值的序号/*----------把序号为min的信息存入三元组中------------*/min_t_length++;min_t[min_t_length].begin=min;min_t[min_t_length].end=assist[min].vertex;min_t[min_t_length].weight=assist[min].short_distance;/*---------------修改assist数组----------*/assist[min].short_distance=0;p=metro[min].next;while(p){if(assist[p->number].short_distance!=0&&p->weight<assist[p->number].short_distance) {assist[p->number].vertex=min;assist[p->number].short_distance=p->weight;}p=p->next;}}}int main(){int n;/*---------输入地点的信息---------*/printf("请输入辖区的个数:");scanf("%d",&n);getchar();Graph *metro=(Graph *)malloc((n+1)*sizeof(Graph));int i;for(i=1;i<n+1;i++){printf("请输入第%d个辖区的名称:",i);gets(metro[i].name);metro[i].next=NULL;}/*------输入边的信息-------*/printf("请输入边的条数:");int edge;scanf("%d",&edge);getchar();printf("请输入各条边的信息(格式:辖区名称辖区名称直接距离)\n"); for(i=1;i<=edge;i++){printf("请输入第%d条边:",i);char str1[NAME_MAX],str2[NAME_MAX];int weight;scanf("%s%s%d",str1,str2,&weight);getchar();int w1,w2;w1=seek_i(metro,n,str1);w2=seek_i(metro,n,str2);if(w1==0||w2==0||weight<=0){printf("输入错误!请重新输入!\n");i--;continue;}append_(metro[w1],w2,weight);append_(metro[w2],w1,weight);}/*------输出邻接表---------*/printf("\n邻接表如下\n");int a;for(a=1;a<=n;a++){printf("%d %s-->",a,metro[a].name);Node *q;q=metro[a].next;while(q){printf("%d_%d ",q->number,q->weight);q=q->next;}putchar(10);}min_tree *min_t=(min_tree *)malloc(n*sizeof(min_tree));plim(metro,n,1,min_t);/*---------输出生成树---------*/printf("\n方案如下(辖区名称辖区名称直接距离):\n");int sum=0;for(i=1;i<n;i++){printf("%s\t\t%s\t\t%d\n",metro[min_t[i].begin].name,metro[min_t[i].end].name,min_t[i].weight);sum+=min_t[i].weight;}printf("总的距离为%d\n",sum);return 0;}5 总结与展望通过这一周的课程设计,加深了我对《数据结构》这门课程所学内容的进一步的理解与掌握;同时,通过对地铁建设问题的开发,使得我将计算机课程所学知识与实际问题很好地相联接在了一起。