数据结构图综合实验实验报告宁波工程学院
图综合实验实验报告
一、实验目的
1)熟悉图的基本操作。
2)掌握求图的最短路径算法。
3)加深对图的理解,逐步培养解决实际问题的编程能力。
班级:计科12-1 学号: 124010101 姓名: 实验日期:2013.12.4
二、实验环境
装有Visual C++6.0的计算机。 本次实验共计4学时。
三、实验内容
【基本要求】
给定n个村庄之间的交通图。若村庄i和j之间有路可通,则i和j用边连接,边上的权值Wij表示这条道路的长度。现打算在这n个村庄中选定一个村庄建一所医院。编写如下算法: (1) 求出该医院应建在哪个村庄,才能使距离医院最远的村庄到医院的路程最短。 (2) 求出该医院应建在哪个村庄,能使其它所有村庄到医院的路径总和最短。 【提示】
? 对于问题(1),可以先求出每个村庄到其它所有村庄的最短路径,保存其最大值(表示
假设医院建在该村庄,距离医院最远的村庄的路径长度);然后在这些最大值中找出一个最小值。 ? 对于问题(2),可以先求出每个村庄到其它所有村庄的最短路径,保存其累加和(表示
假设医院建在该村庄,其它所有村庄距离医院的路径总和);然后在这些和中找出一个最小值。
? 自己设定n个村庄的交通图。例如下图所示:
四、 重要数据结构
typedef struct /*图的定义*/
{ int edges[MAXV][MAXV]; /*邻接矩阵*/ int n,e; /*顶点数,弧数*/
} MGraph; /*图的邻接矩阵类型*/
五、 实现思路分析
void Dijkstra(MGraph g,int v); //狄克斯特拉算法
void Dispath(int dist[],int path[],int s[],int n,int v); void Ppath(int path[],int i,int v); void He(MGraph g,int v);//情况一 void Slove(MGraph g,int v);//情况二
六、 程序调试问题分析
狄克斯特拉算法输出的dist【i】总为0,在主函数对g.edges[i][j]先赋值即可。
七、 实验总结
通过这次实验,我对最小生成树有了更好的认识。在实验过程中,我掌握了最短路径的构造方法,学会了如何将理论知识转换为实际应用。同时,在解决程序中遇到的一些问题的同时,我也对调试技巧有了更好的掌握,分析问题的能力也略有提高。
在实验中,我遇到了许多难点,这就需要我们有扎实的基础,需要有灵活的头脑,只有不断的练习,不断的训练,我们才能处理各种问题。在以后的学习中,我要不断的努力,多联系,多思考,我相信我能有所进步的。
#include
int no;
/*顶点编号*/
// InfoType info;
/*顶点其他信息*/
/*最大顶点个数*/
#define INF 32767 /*INF表示∞*/
//} VertexType;
typedef struct
/*顶点类型*/
/*图的定义*/
/*邻接矩阵*/
/*图的邻接矩阵类型*/
{ int edges[MAXV][MAXV]; } MGraph;
typedef struct {
int n,e; /*顶点数,弧数*/
int u; //边的起始顶点 int v; //边的终止顶点 int w; //边的权值
} Edge;
void Dijkstra(MGraph g,int v); //狄克斯特拉算法
void Dispath(int dist[],int path[],int s[],int n,int v); void Ppath(int path[],int i,int v); void He(MGraph g,int v);//情况一 void Slove(MGraph g,int v);
int main() {
MGraph g; int i,u,v,w,j,n;
freopen(\,\,stdin); g.n = 6;g.e = 10; for( i=0;i { scanf(\,&u,&v,&w); g.edges[u][v] = w; g.edges[v][u] = w; } for(i = 0; i < g.n; i++) Dijkstra(g,i); for( j=0;j if(i!=j)g.edges[i][j]=INF; else g.edges[i][j]=0; for (i = 0; i < g.e; i++) printf(\); He(g,0); printf(\); // for(i = 0; i < g.n; i++) Slove(g,i); } void Ppath(int path[],int i,int v) { int k; k = path[i]; if(k == v) return; Ppath(path,k,v); printf(\,k); } void Dispath(int dist[],int path[],int s[],int n,int v) { } void Dijkstra(MGraph g,int v) //狄克斯特拉算法 { int dist[MAXV],path[MAXV]; int s[MAXV]; int mindis,i,j,u; for(i = 0; i < g.n; i ++) { dist[i] = g.edges[v][i]; s[i] = 0; if(g.edges[v][i] path[i] = v; path[i] = -1; else int i; for(i = 0; i < n; i++) if(s[i] == 1 && i != v) { } printf(\从%d到%d的最短路径长度为:%d\\t路径为:\,v,i,dist[i]); printf(\,v); Ppath(path,i,v); printf(\,i); return 0; } } s[v] = 1;path[v] = 0; for(i = 0; i Dispath(dist,path,s,g.n,v); mindis = INF; for(j = 0;j if(s[j] == 0 && dist[j] < mindis) { } s[u] = 1; if(s[j] == 0) if(g.edges[u][j] < INF && dist[u] + g.edges[u][j] < dist[j]) { } dist[j] = dist[u] + g.edges[u][j]; path[j] = u; u = j; mindis = dist[j]; for(j = 0; j < g.n; j++) void He(MGraph g,int v) { int i,j,max,min,k = -1; max = -INF; min = INF; for(i = 0; i < g.n; i++) { } printf(\医院建在%d能使距离医院最远的村庄到医院的路程最短,最短路程为%d\\n\,k,min); for(j = 0; j < g.n; j++) { } if(max < min){ } printf(\出发最远距离:%d\\n\,i,max); min = max; k = i; if(g.edges[i][j] > max && i != j && g.edges[i][j] != INF) max = g.edges[i][j]; printf(\);
相关推荐:
- [法律文档]苏教版七年级语文下册第五单元教学设计
- [法律文档]向市委巡视组进点汇报材料
- [法律文档]绵阳市2018年高三物理上学期第二次月考
- [法律文档]浅析如何解决当代中国“新三座大山”的
- [法律文档]延安北过境线大桥工程防洪评价报告 -
- [法律文档]激活生成元素让数学课堂充满生机
- [法律文档]2014年春学期九年级5月教学质量检测语
- [法律文档]放射科标准及各项计1
- [法律文档]2012年广州化学中考试题和答案(原版)
- [法律文档]地球物理勘查规范
- [法律文档]《12系列建筑标准设计图集》目录
- [法律文档]2018年宁波市专技人员继续教育公需课-
- [法律文档]工会委员会工作职责
- [法律文档]2014新版外研社九年级英语上册课文(完
- [法律文档]《阅微草堂笔记》部分篇目赏析
- [法律文档]尔雅军事理论2018课后答案(南开版)
- [法律文档]储竣-13827 黑娃山沟大开挖穿越说明书
- [法律文档]《产品设计》教学大纲及课程简介
- [法律文档]电动吊篮专项施工方案 - 图文
- [法律文档]实木地板和复合地板的比较
- 探析如何提高电力系统中PLC的可靠性
- 用Excel函数快速实现体能测试成绩统计
- 教师招聘考试重点分析:班主任工作常识
- 高三历史选修一《历史上重大改革回眸》
- 2013年中山市部分职位(工种)人力资源视
- 2015年中国水溶性蛋白市场年度调研报告
- 原地踏步走与立定教学设计
- 何家弘法律英语课件_第十二课
- 海信冰箱经销商大会——齐俊强副总经理
- 犯罪心理学讲座
- 初中英语作文病句和错句修改范例
- 虚拟化群集部署计划及操作流程
- 焊接板式塔顶冷凝器设计
- 浅析语文教学中
- 结构力学——6位移法
- 天正建筑CAD制图技巧
- 中华人民共和国财政部令第57号——注册
- 赢在企业文化展厅设计的起跑线上
- 2013版物理一轮精品复习学案:实验6
- 直隶总督署简介




