数据结构课程设计
数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。
2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。
3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。
技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。
2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。
3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。
2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。
3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。
通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。
在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。
2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。
3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。
4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。
5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。
6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。
7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。
数据结构课程设计完整版

通讯录操作系统一.需求分析当今时代是飞速发展的信息时代。
在各行各业中离不开信息管理以及处理,这正是计算机被广泛应用于管理系统的原因。
计算机管理的好处在于利用它能够进行信息储存以及信息编辑。
用计算机储存和控制,大大提高了工作效率也减少了好多人的工作量。
通讯录信息系统不仅仅帮助了人们记忆,同时也为不少管理者提供了方便。
其设计理念较简单,将传统的纸张与笔录方式改为计算机自动化进行通讯录信息管理,既省时间又提高工作效率。
用c语言构建的通讯录系统设计,通过课上学到一些关于结构体、数组、指针、函数以及循环函数的运用和字符串的处理等基本知识可以初步的实现通讯录的输入、显示、查找、删除等简单实用功能,给人们带来更多的方便。
通讯录信息系统的主要功能清单如下:1) 建立通讯录链表;2) 通讯者结点的插入(按编号的次序插入有序通讯录表);3) 通讯者信息的查询(按编号或姓名查找通讯者信息);4) 通讯者信息的删除(按编号或姓名删除通讯者信息);5) 通讯录的显示(显示所有通讯者信息列表);6) 通讯录信息系统的退出测试数据见调试分析。
二.详细设计算法分析:↓↓↓↓↓↓主函数流程图:主函数流程图创建函数流程图:显示通讯录流程图:查找函数流程图(1)find函数:find函数流程图(2)search函数Search函数流程图删除操作流程图:插入函数流程图:退出函数流程图:图11退出函数流程图3)调试分析及测试结果进入系统后,系统会出现图所示菜单:在主菜单中输入1后,系统会给出提示,如图所示:在主菜单中输入3后,输入要找的姓名。
在系统没有要找信息时或链表为空时,系统会给出提示,确认用户是否继续查找,如图所示:(链表为空时的查找)若要继续查找则按1 ,不是则按0,如图所示:(链表非空的查找)在主菜单中输入0后,系统会给出提示,提示用户输入相关信息,如图所示:依次输入提示信息输入信息:1wuyifeinv139********Wuhan2wwnv132********Wuhan再在主菜单输入1后,程序显示如图所示:在主菜单中输入2后输入要删除的编号,系统便自动删除要删除的通讯录信息,如图15所示:按1显示查看是否删除如图:输入4进行插入操作,如图所示:插入信息如下2wyfnv12345678912wuhan按1进行显示如下图:现在如果没有其他的操作则可按5退出,操作如图所示:实验心得:通过这次课程设计,我熟练的掌握了结构体、数组、指针、函数以及循环函数的运用和字符串的处理,了解代码中出现错误寻找错误的方法,初步了解到了一个完整的应用程序,应该如何处理美观与实用之间的关系,如何处理实际需求与操作难度之间的关系,并让我深刻了解到数据结构这门课的重要性和实用性,在以后的学习中,我将更加努力的学习并动手实践这门课程。
数据结构课程设计pdf

数据结构课程设计 pdf一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、栈、队列、树、图等;2. 使学生了解不同数据结构的特点,并能运用其解决实际问题;3. 引导学生掌握常见数据结构的相关算法,如排序、查找等。
技能目标:1. 培养学生运用数据结构描述问题的能力,提高编程实现复杂问题的技能;2. 培养学生具备分析算法复杂度,选择合适数据结构和算法解决问题的能力;3. 提高学生的团队协作能力,通过小组讨论和项目实践,培养学生的沟通表达能力和协作精神。
情感态度价值观目标:1. 激发学生对计算机科学的兴趣,培养学生主动探索、勇于创新的精神;2. 培养学生具备良好的学习习惯,严谨的学术态度,对待问题敢于质疑、善于思考;3. 引导学生认识到数据结构在实际应用中的重要性,提高学生的专业认同感。
本课程针对高中年级学生,结合数据结构课程性质,注重理论与实践相结合,培养学生解决实际问题的能力。
考虑到学生的年龄特点,课程设计力求生动有趣,以激发学生的学习兴趣。
在教学过程中,注重启发式教学,引导学生主动探索、积极思考,提高学生的综合素质。
通过本课程的学习,期望学生能够达到上述课程目标,为后续计算机科学课程打下坚实基础。
二、教学内容1. 线性表:介绍线性表的定义、特点和基本操作,包括顺序存储和链式存储的实现方法。
教材章节:第一章第一节进度安排:2课时2. 栈和队列:讲解栈和队列的基本概念、性质以及应用场景,实现顺序栈和链栈、循环队列等。
教材章节:第一章第二节进度安排:3课时3. 树和二叉树:阐述树和二叉树的基本概念、性质、存储结构及遍历方法,包括二叉排序树、平衡二叉树等。
教材章节:第二章进度安排:5课时4. 图:介绍图的定义、存储结构、遍历算法以及最短路径、最小生成树等算法。
教材章节:第三章进度安排:5课时5. 排序与查找:讲解常见排序算法(冒泡、选择、插入等)和查找算法(顺序、二分、哈希等),分析其算法复杂度。
《数据结构》课程整体教学设计

《数据结构》课程整体教学设计数据结构课程整体教学设计一、引言数据结构是计算机科学中的一门重要课程,它是计算机程序设计的基础。
本文旨在设计一套整体教学方案,以帮助学生全面理解数据结构的概念、原理和应用,并培养学生的问题分析和解决能力。
二、教学目标1. 理解数据结构的基本概念,如数组、链表、栈、队列、树、图等。
2. 掌握各种数据结构的实现方式,包括顺序存储和链式存储。
3. 熟悉数据结构的基本操作,如插入、删除、查找、排序等。
4. 理解算法与数据结构之间的关系,能够灵活地选择适合的数据结构解决实际问题。
5. 培养学生的团队协作和沟通能力,通过小组项目实践提升实际应用能力。
三、教学内容及安排1. 基础知识教学(2周)a) 介绍数据结构的定义、分类和基本概念。
b) 详细讲解数组、链表、栈和队列的基本原理和实现方法。
c) 引导学生通过编程实践掌握基础数据结构的使用。
2. 高级数据结构教学(3周)a) 介绍树、图等高级数据结构的定义和应用场景。
b) 分析树、图的特点和基本操作,包括遍历、搜索和最短路径等算法。
c) 引导学生通过实例理解和实现高级数据结构及其相关算法。
3. 算法与数据结构的关系(1周)a) 介绍算法的基础概念,如时间复杂度和空间复杂度。
b) 分析常用算法与数据结构之间的关系,如排序算法与数组、查找算法与树等。
c) 培养学生运用不同数据结构解决实际问题的能力。
4. 小组项目实践(4周)a) 学生自行组成小组,选定一个实际问题进行分析和解决方案设计。
b) 引导学生选择合适的数据结构和算法,实现项目需求。
c) 指导学生撰写项目报告,总结项目经验和收获。
四、教学方法与策略1. 合理运用多媒体技术,辅助教学内容的讲解和演示。
2. 结合示例和实践,引导学生进行课堂互动和编程实践。
3. 组织小组合作学习,促进学生的团队协作和沟通能力。
4. 鼓励学生积极参与讨论和提问,激发学习兴趣和思考能力。
5. 提供适当的学习资源和参考资料,帮助学生进行自主学习。
数据结构课程设计(5篇)

数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。
三、具体要求1)利用完全二叉树的性质建立一棵二叉树。
(层数不小于4层)2)统计树叶子结点的个数。
3)求二叉树的深度。
4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。
四、进度安排依照教学计划,课程设计时间为:2周。
本设计要求按照软件工程的基本过程完成设计。
建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配的大概比例是:35: 45: 20。
五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。
其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。
4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。
5、源代码要求在关键的位置有注释,增加程序的可读性。
程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。
数据结构课程设计

数据结构课程设计1. 引言数据结构是计算机科学中非常重要的一门课程,它研究将数据组织和存储在计算机中的方法。
为了更好地掌握数据结构的理论知识和实践能力,本课程设计将帮助学生深入了解和应用各种常见的数据结构。
2. 课程设计目标本课程设计的主要目标是帮助学生掌握以下内容:- 理解不同数据结构的特点和适用场景;- 掌握常见数据结构的实现原理和相关算法;- 能够灵活运用数据结构解决实际问题;- 培养学生的编程能力和问题解决能力。
3. 课程设计内容3.1 线性数据结构线性数据结构是数据元素之间存在一对一关系的数据结构,包括数组、链表、队列和栈等。
学生需要通过实例讲解和编程实践来理解它们的概念和实现方法,例如使用数组实现队列和栈等。
3.2 树形数据结构树形数据结构是一种重要的非线性数据结构,包括二叉树、二叉搜索树、堆和哈希表等。
学生需要学习树的基本概念、遍历算法和相关实现方式,如平衡二叉树的调整和哈希函数的设计等。
3.3 图形数据结构图形数据结构是由节点和边组成的复杂数据结构,包括有向图和无向图等。
学生需要了解图的基本概念、图的遍历算法和最短路径算法等。
通过编程实践,学生可以实现常见的图算法,如深度优先搜索和广度优先搜索等。
4. 课程设计实践4.1 编程作业学生将通过完成一系列编程作业来应用所学的数据结构知识。
每个作业都与实际问题密切相关,例如实现一个通讯录管理系统,利用二叉搜索树实现一个字典等。
通过这些作业,学生将深入理解数据结构的应用和实现。
4.2 小组项目学生将分组进行一个小组项目,用于解决一个与数据结构相关的实际问题。
例如,通过利用图算法实现地图导航系统,或者使用哈希表进行文本搜索和替换等。
这些项目将要求学生合作解决问题,提高他们的团队合作能力和创新能力。
5. 课程设计评估为了评估学生对数据结构的掌握程度,将进行以下评估方式:- 编程作业的完成情况和代码质量;- 小组项目的展示和实际应用效果;- 期末考试,包括理论知识和问题解决能力的考察。
数据结构刘畅课程设计
数据结构刘畅课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、栈、队列、树等常见数据结构的特点和应用场景。
2. 学会分析不同数据结构在解决实际问题中的效率,并能选择合适的数据结构进行问题求解。
3. 掌握排序和查找算法的基本原理,学会运用算法优化程序性能。
技能目标:1. 能够运用所学数据结构知识,设计并实现小型程序,解决实际问题。
2. 培养良好的编程习惯,提高代码编写和调试能力。
3. 培养学生团队协作和沟通能力,学会在项目中分工合作,共同解决问题。
情感态度价值观目标:1. 培养学生对数据结构学习的兴趣,激发学生主动探索的精神。
2. 培养学生面对复杂问题时,保持耐心、细心的态度,勇于克服困难。
3. 培养学生具备良好的信息素养,认识到数据结构在信息技术领域的重要性。
本课程针对高中年级学生,结合数据结构刘畅课程内容,注重理论与实践相结合,旨在提高学生的编程能力和解决问题的能力。
课程目标具体、可衡量,便于教师进行教学设计和评估。
通过本课程的学习,使学生能够在实际编程中灵活运用数据结构知识,为后续计算机专业课程打下坚实基础。
二、教学内容本课程教学内容紧密结合课程目标,依据教材《数据结构》刘畅版,主要包括以下章节:1. 数据结构概述:介绍数据结构的基本概念、作用和分类,为后续学习打下基础。
- 线性表、栈、队列:分析线性表的实现方式,讲解栈和队列的应用场景及操作方法。
- 树、二叉树:探讨树和二叉树的结构特点,掌握二叉树的遍历算法。
2. 算法设计与分析:学习算法设计的基本原则,分析常见算法的时间复杂度和空间复杂度。
- 排序算法:学习冒泡排序、选择排序、插入排序等常见排序算法,分析其优缺点。
- 查找算法:介绍顺序查找、二分查找等查找方法,并分析其效率。
3. 数据结构应用:结合实际案例,运用所学知识解决实际问题。
- 程序设计与实现:培养学生编写结构清晰、高效运行的程序。
- 项目实践:分组进行项目实践,锻炼学生团队协作能力和实际操作能力。
数据结构课程设计目录及正文
数据结构课程设计目录及正文一、课程设计目的数据结构是计算机科学中的一门重要基础课程,通过课程设计,旨在让学生更深入地理解和掌握数据结构的基本概念、原理和算法,并能够将其应用到实际问题的解决中。
培养学生的问题分析能力、算法设计能力、程序编写能力和调试能力,提高学生的综合素质和创新能力。
二、课程设计要求1、学生需独立完成课程设计任务,不得抄袭他人成果。
2、课程设计应具有清晰的结构和良好的可读性,代码规范,注释详细。
3、选择合适的数据结构和算法解决给定的问题,并对算法的时间复杂度和空间复杂度进行分析。
4、完成课程设计报告,包括问题描述、算法设计、程序实现、测试结果和总结等内容。
三、课程设计题目1、图书管理系统实现图书的添加、删除、查询、修改等功能。
按照图书的分类、作者、书名等进行排序和查找。
2、学生成绩管理系统录入学生的成绩信息,包括学号、姓名、课程名称、成绩等。
计算学生的平均成绩、总成绩,并按照成绩进行排序。
3、公交线路查询系统建立公交线路的网络模型。
实现站点之间的最短路径查询和换乘方案查询。
4、停车场管理系统模拟停车场的车辆进出管理。
计算停车费用,显示停车场的当前状态。
四、课程设计目录1、引言2、需求分析问题描述功能需求数据需求性能需求3、总体设计系统架构模块划分数据结构设计4、详细设计模块功能描述算法设计界面设计5、编码实现代码框架关键代码实现6、测试与调试测试用例测试结果调试过程7、总结课程设计的收获遇到的问题及解决方法对数据结构课程的进一步理解8、参考文献9、附录源程序代码五、正文内容(一)引言随着信息技术的不断发展,计算机在各个领域的应用越来越广泛。
数据结构作为计算机科学的重要基础,对于提高程序的效率和质量起着至关重要的作用。
本次课程设计旨在通过实际项目的开发,让学生将所学的数据结构知识运用到实践中,提高解决实际问题的能力。
(二)需求分析1、问题描述以图书管理系统为例,系统需要对图书馆中的图书进行有效的管理,包括图书的基本信息(书名、作者、出版社、出版日期、ISBN 号等)、图书的库存数量、借阅状态等。
《数据结构》课程设计
《数据结构》课程设计一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中基础的数据组织、管理和处理方法,培养其运用数据结构解决实际问题的能力。
课程目标如下:1. 知识目标:(1)理解基本数据结构的概念、原理和应用,如线性表、栈、队列、树、图等;(2)掌握常见算法的设计和分析方法,如排序、查找、递归、贪心、分治等;(3)了解数据结构在实际应用中的使用,如操作系统、数据库、编译器等。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,具备良好的编程实践能力;(2)掌握算法分析方法,能够评价算法优劣,进行算法优化;(3)能够运用数据结构进行问题建模,提高问题解决效率。
3. 情感态度价值观目标:(1)激发学生对计算机科学的兴趣,培养其探索精神和创新意识;(2)培养学生团队合作意识,学会与他人共同解决问题;(3)增强学生的责任感和使命感,使其认识到数据结构在信息技术发展中的重要性。
本课程针对高中年级学生,结合学科特点和教学要求,将目标分解为具体的学习成果,为后续教学设计和评估提供依据。
课程注重理论与实践相结合,旨在提高学生的知识水平、技能素养和情感态度价值观。
二、教学内容《数据结构》教学内容依据课程目标进行选择和组织,确保科学性和系统性。
主要包括以下部分:1. 线性表:- 线性表的定义、特点和基本操作;- 顺序存储结构、链式存储结构及其应用;- 线性表的相关算法,如插入、删除、查找等。
2. 栈和队列:- 栈和队列的定义、特点及基本操作;- 栈和队列的存储结构及其应用;- 栈和队列相关算法,如进制转换、括号匹配等。
3. 树和二叉树:- 树的定义、基本术语和性质;- 二叉树的定义、性质、存储结构及遍历算法;- 线索二叉树、哈夫曼树及其应用。
4. 图:- 图的定义、基本术语和存储结构;- 图的遍历算法,如深度优先搜索、广度优先搜索;- 最短路径、最小生成树等算法。
5. 排序和查找:- 常见排序算法,如冒泡、选择、插入、快速等;- 常见查找算法,如顺序、二分、哈希等。
《数据结构》教案
《数据结构》教案一、教学目标1. 理解数据结构的基本概念和重要性。
2. 掌握常用的数据结构,如数组、链表、栈、队列、树、图等。
3. 学会分析数据结构的时间和空间复杂度。
4. 能够运用数据结构解决实际问题,提高编程能力和软件开发效率。
二、教学内容1. 数据结构的基本概念:数据的定义、数据类型的分类、数据结构的概念及其重要性。
2. 数组和链表:数组的概念、数组的操作、链表的概念、单链表和双向链表的实现。
3. 栈和队列:栈的定义及操作、队列的定义及操作、栈和队列的应用场景。
4. 树:树的概念、二叉树、遍历算法、哈夫曼编码。
5. 图:图的概念、图的表示、图的遍历算法、最短路径算法。
三、教学方法1. 采用讲授法讲解数据结构的基本概念和原理。
2. 通过案例分析和编程实践,让学生掌握数据结构的实现和应用。
3. 利用图形和动画演示数据结构的操作和算法,提高学生的理解力。
4. 组织讨论和小组合作,培养学生的团队协作能力和解决问题的能力。
四、教学环境1. 教室环境:宽敞、明亮、安静,适合进行教学活动。
2. 计算机设备:每人一台电脑,安装有相关编程软件和教学辅助工具。
3. 网络环境:教室具备稳定的网络连接,便于查找资料和在线交流。
五、教学评价1. 平时成绩:课堂参与度、作业完成情况、小组讨论表现等。
2. 考试成绩:期末考试,包括选择题、填空题、简答题和编程题。
3. 实践能力:课后编程实践,完成相关数据结构的应用项目。
4. 综合素质:团队协作、问题解决、创新能力等。
六、教学资源1. 教材:《数据结构(C语言版)》等相关教材。
2. 课件:PowerPoint或其他演示软件制作的课件。
3. 编程实践项目:安排课后编程实践项目,如链表、栈、队列、树、图等应用。
4. 在线资源:提供相关的在线教程、视频、博客等,供学生自主学习。
5. 编程工具:Visual Studio、Eclipse等集成开发环境。
七、教学进程1. 第一周:数据结构基本概念、数据的定义和类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书学生姓名:吴益清专业班级:软件工程1101 指导教师:夏红霞工作单位:计算机科学与技术学院题目: 基于Floyd算法医院选址的实现初始条件:理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法;实践:软件工程系实验室提供计算机及软件开发环境。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能:(1)以邻接表为存储结构,建立n个结点的无向图(2)用Floyd算法实现医院选址(3)演示结果2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰写课程设计报告,包括:(1)设计题目;(2)摘要和关键字(中文和英文);(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、设计体会等;(4)结束语;(5)参考文献。
时间安排: 2013年元月21日-25日(第21周)元月21日查阅资料元月22日系统设计,数据结构设计,算法设计元月23日-24日编程并上机调试,验收程序元月25日撰写报告、提交报告指导教师签名: 2013年元月21日系主任(或责任教师)签名: 2013年元月21日程序代码如下:#include <iostream>using namespace std;int INFTY=32767;//整型数据的范围是-23768~32767,此处用32767表示无穷template<class T> //“T”为模板形参class Graph //基类{public:virtual void Insert(int u,int v,T& w)=0;virtual void Remove(int u,int v)=0;virtual bool Exist(int u,int v)=0;virtual int Vertices()const {return n;}protected:int n,e; //n表示村庄的个数,e表示无向图的边数};template <class T>class MGraph:public Graph<T>//邻接矩阵存储图{public:MGraph(); //构造函数,建立无向图~MGraph(); //析构函数,释放运行工程中的开辟的空间void Build_Graph(); //构建无向图void Insert(int u,int v,T& w); /*假如村庄节点的函数,包括权值,和相邻村庄编号*/void Remove(int u,int v); /*当两个村庄之间不能直接连通时,u,v两个村庄之间的权值就是无穷*/bool Exist(int u,int v); /*判断是否存在u,v两个村庄,存在返回true,否则返回false*/void Floyd(T**&d,int**&path); //建立Floyd函数,实现医院选址int num;protected:T**a; //二维数组,表示两个村庄之间的权值T noEdge;};template <class T>void MGraph<T>::Build_Graph()//建图{cout<<"请输入顶点的个数:"<<endl;int C_num;cin>>C_num;num=n=C_num;e=0;noEdge=INFTY;a=new T*[n];for(int k=0;k<n;k++){a[k]=new T [n]; //开辟n个T类型大小的空间for(int j=0;j<n;j++)a[k][j]=noEdge;a[k][k]=0;}cout<<"建立村庄编号为1--"<<C_num<<"的图"<<endl;for(int i=0;i!=C_num;i++)for(int j=i+1;j!=C_num;j++){int w;cout<<"请输入村庄"<<i+1<<"与村庄"<<j+1<<"之间的权值:";cin>>w;Insert(i,j,w); //向图中添加权值为W的边cout<<i<<"--->"<<j<<":"<<a[i][j]<<endl;}cout<<"******************************************************** *************"<<endl;cout<<"已建立村庄编号为1--"<<C_num<<"的图:"<<endl;cout<<"**********************************"<<endl;cout<<" \t\t";for(int b=1;b<=C_num;b++)//输出邻接矩阵{cout<<b<<"\t";}cout<<endl;}template <class T>MGraph<T>::MGraph(){Build_Graph();}template <class T>MGraph<T>::~MGraph(){for(int i=0;i<n;i++)delete[]a[i];delete[]a;}template <class T>bool MGraph<T>::Exist(int u,int v){if(u<0||v<0||u>n-1||v>n-1||u==v||a[u][v]==noEdge) return false; return true;}template <class T>void MGraph<T>::Insert(int u,int v,T &w){a[u][v]=w;a[v][u]=w;e++;}template <class T>void MGraph<T>::Remove(int u,int v){a[u][v]=noEdge;e--;}template <class T>void MGraph<T>::Floyd(T**&d,int**&path)//所有顶点之间的最短路径{int i,j,k;d=new T*[n];path=new int*[n];for(i=0;i<n;i++){d[i]=new T[n];path[i]=new int[n];for(j=0;j<n;j++){d[i][j]=a[i][j];if(i!=j&& a[i][j]<INFTY)path[i][j]=i; else path[i][j]=-1;}}for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)if(d[i][k]+d[k][j]<a[i][j]){d[i][j]=d[i][k]+d[k][j];path[i][j]=path[k][j];}}int main(){MGraph<int> Hospital;int **d,**path;int i,j,n;n=Hospital.num;Hospital.Floyd(d,path);int *sum=new int[n];cout<<endl;for(i=0;i!=n;i++)//输出矩阵{cout<<i+1<<"\t\t";sum[i]=0;for(j=0;j!=n;j++){sum[i]+=d[i][j];cout<<d[i][j]<<"\t";}cout<<endl;}cout<<"******************************************************** *************"<<endl;int min=0;for(i=0;i!=n;i++){cout<<i+1<<"村庄:"<<sum[i]<<endl;if(sum[min]>sum[i])//判断最短路径min=i;}cout<<"医院应在编号为"<<min+1<<"的村庄"<<endl;for(i=0;i<n;i++){delete[]d[i];delete[]path[i];}delete[]d;delete[]path;return 0;}。