弗洛伊德算法求解最短路径
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第
建图过程:根据屏幕上的显示输入,你会看到如下界面;
添加城市过程:根据界面提示操作,结果如下,添加一城市后如下:
我总共添加了三个城市,最后结果如下界面:
指导教师(签名)
年
月
日
学生(签名)
年
月
日
1.1
容:给出一无向图,图上的每个顶点表示一个城市,顶点间的边表示城市间存在路径,边上的权值表示城市间的距离。试编写程序求解从某一个城市出发到达任意其他任意城市的最短路径问题。
要求:
1)能够提供简单友好的用户操作界面,可以输入城市的基本信息,包括城市名称,城市编号等;
3.2 调试中期
在上机输入完程序后,出现了许多错误,其中有一些小错误,比如说忘记写分号,在这些错误上双击,找到位置,加上分号。还有就是程序中的有的变量在前面没有定义,只要在前面添加上就可以了。
再有就是前后的类型要保持一致,在这块我也犯了个错误。前面是指针类型,后面却是取地址类型,解决办法就是把前面的改成指针类型,保持前后一致。
图2.4修改城市距离流程图
否
是
否
是
否是
是
是
第
3.1 调试初期
由于编写的程序具有模块化的特性,且VC 6.0 的调试显然由于TC及个人对VC的熟练程度远优于TC等方面,我选择先在VC 6.0环境下完成除图形化演示算法过程函数的其他过程。
由于数据结构选择的较合理,对Floyd算法的理解较为深刻,所以在此环境下的调试并没有太多困难。
要求:
1)能够提供简单友好的用户操作界面,可以输入城市的基本信息,包括城市名称,城市编号等;
2)利用矩阵保存城市间的距离;
3)利用Floyd算法求最短路径;
4)独立完成系统的设计,编码和调试;
5)系统利用C语言完成;
6)按照课程设计规书写课程设计报告。
参考资料:
《算法与数据结构》
《C语言程序设计》
教研室审核意见:教研室主任签字:ห้องสมุดไป่ตู้
图2.4修改城市距离流程图
2.
利用Floyd求最短路径,假设vi到vj存在路径,长度为k,假设vi到vj经过vk(i=0 1…..n)长度为m,比较k和m,如果k>m,则d(vi,vj)=m,否则为k,依次类推,直到所有的vi到vj的中间城市比较完,最后d(vi,vj)的值即为最短距离,同时在比较的过程中保存路径信息,最后在查询时即可输出路径。具体见第四章:测试及运行结果中求最短路径界面
2)利用矩阵保存城市间的距离;
3)利用Floyd算法求最短路径;
4)独立完成系统的设计,编码和调试;
5)系统利用C语言完成;
6)按照课程设计规书写课程设计报告。
1.2
本程序主要分为四个模块(功能模块见图1.1):主模块对整个程序起一主导作用,开始构建一城市无向图,对其进行添加城市顶点,以及对原来的距离数据进行修改,整体构建结束可以实现求一城市到其他城市的最短路径问题。
图1.1功能模块图
第
2.1
用户根据屏幕上显示的操作提示输入要进行操作的模块,通过调用相对应的模块程序,达到用户所想进行操作。程序的总框架大致分为四个模块:1.建立城市无向图2.添加城市模块3.修改城市距离4.求最短路径。具体实现过程见2.2:建立城市无向图2.3:添加城市2.4:修改城市距离2.5:求最短路径。流程图过输入n,由n的值来选择调用相对应子函数,实现所选择的功能,调用完后可以返回调用主函数进行下一次选择,从而实现反复调用子函数而实现四个模块的功能等。
还有就是遗忘分号,逗号,解决方法就是,一步一步的把遗忘的分号,逗号补上。
忘记定义变量的类型。比i应该是整型的却忘记申明。解决方法就是在函数先申明int类型的i.。粗心导致很多细节问题,比如该输入英文的括号的,却输成中文的括号,解决方法,把中英文分开。注意细节问题。
3.3 调试末期
输入的数据无法找出正确的路径,解决方法,一步一步的调试,找出问题的所在,改正逻辑错误。在同学的帮助下,找到了逻辑错误,一步一步地改正,终于得到预期的结果。
图2.3添加城市流程图
否
是
否
是
是
2.
根据屏幕上的城市编号,输入想更改的城市编号。在进行该模块时会输出原来的距离。由于在现实生活中由于一些人为的测量误差或是一些自然因素,又或是城市整编等等一系列的因素需要改动原来的城市距离,此时应用该块修改的功能即可实现更改,且根据提示操作简单,用户具体可以参看第四章:测试及运行结果。流程图中p,q表示城市的编号,根据p和q可以找到对应的城市名称,找到对应的g.v[p][q].distance即是原来两城市间的距离。
图2.2构建城市无向图流程图
否
是
否
是
用户根据提示输入想要添加到无向图中的城市,根据屏幕中的提示输入与之邻接的城市间的距离,然后添加城市距离矩阵图中;同时将g.v[m][n].path赋值为-1即表示p城到q城有路可达且最短路径无需经过其他城市。需注意的是当g.v[m][n].distance=0表示p城到q城的距离为0,当g.v[m][n].distance=99999,则表示p城到q城距离无穷大即表示他们之间无路径可达,而当g.v[m][n].distance=k(0<k<99999)时表示他们间的距离是k。流程图中g.n表示当前图中存储的城市数量,dis表示输入的城市间的距离即q和g.n表示城市间的距离。通过q<g.n的条件判断来充分完成图对应的矩阵中的赋值。
课程设计任务书
课程设计名称
数据结构课程设计
专业
计算机科学与技术
(物联网方向)
学生
班级
学号
题目名称
最短路径求解
起止日期
2015
年
1
月
5
日起至
2015
年
1
月
16
日止
课设容和要求:
容:给出一无向图,图上的每个顶点表示一个城市,顶点间的边表示城市间存在路径,边上的权值表示城市间的距离。试编写程序求解从某一个城市出发到达任意其他任意城市的最短路径问题。
图2.1主模块流程图
2.
根据提示输入城市,对城市无向矩阵图进行初始化,开始g.v[m][n].path的路径值赋为-2表示p城到q城间中间没有可达的路径不经过其他城市,而g.v[m][n].distance赋值为0表示p到p的距离为0。流程图中的MAX表示的是最多的城市数量,其值为20;p,q表示城市的编号,而path和distance分别表示的路径和城市间距离。g.v[p][q].distace表示p、q代表的城市间的距离
建图过程:根据屏幕上的显示输入,你会看到如下界面;
添加城市过程:根据界面提示操作,结果如下,添加一城市后如下:
我总共添加了三个城市,最后结果如下界面:
指导教师(签名)
年
月
日
学生(签名)
年
月
日
1.1
容:给出一无向图,图上的每个顶点表示一个城市,顶点间的边表示城市间存在路径,边上的权值表示城市间的距离。试编写程序求解从某一个城市出发到达任意其他任意城市的最短路径问题。
要求:
1)能够提供简单友好的用户操作界面,可以输入城市的基本信息,包括城市名称,城市编号等;
3.2 调试中期
在上机输入完程序后,出现了许多错误,其中有一些小错误,比如说忘记写分号,在这些错误上双击,找到位置,加上分号。还有就是程序中的有的变量在前面没有定义,只要在前面添加上就可以了。
再有就是前后的类型要保持一致,在这块我也犯了个错误。前面是指针类型,后面却是取地址类型,解决办法就是把前面的改成指针类型,保持前后一致。
图2.4修改城市距离流程图
否
是
否
是
否是
是
是
第
3.1 调试初期
由于编写的程序具有模块化的特性,且VC 6.0 的调试显然由于TC及个人对VC的熟练程度远优于TC等方面,我选择先在VC 6.0环境下完成除图形化演示算法过程函数的其他过程。
由于数据结构选择的较合理,对Floyd算法的理解较为深刻,所以在此环境下的调试并没有太多困难。
要求:
1)能够提供简单友好的用户操作界面,可以输入城市的基本信息,包括城市名称,城市编号等;
2)利用矩阵保存城市间的距离;
3)利用Floyd算法求最短路径;
4)独立完成系统的设计,编码和调试;
5)系统利用C语言完成;
6)按照课程设计规书写课程设计报告。
参考资料:
《算法与数据结构》
《C语言程序设计》
教研室审核意见:教研室主任签字:ห้องสมุดไป่ตู้
图2.4修改城市距离流程图
2.
利用Floyd求最短路径,假设vi到vj存在路径,长度为k,假设vi到vj经过vk(i=0 1…..n)长度为m,比较k和m,如果k>m,则d(vi,vj)=m,否则为k,依次类推,直到所有的vi到vj的中间城市比较完,最后d(vi,vj)的值即为最短距离,同时在比较的过程中保存路径信息,最后在查询时即可输出路径。具体见第四章:测试及运行结果中求最短路径界面
2)利用矩阵保存城市间的距离;
3)利用Floyd算法求最短路径;
4)独立完成系统的设计,编码和调试;
5)系统利用C语言完成;
6)按照课程设计规书写课程设计报告。
1.2
本程序主要分为四个模块(功能模块见图1.1):主模块对整个程序起一主导作用,开始构建一城市无向图,对其进行添加城市顶点,以及对原来的距离数据进行修改,整体构建结束可以实现求一城市到其他城市的最短路径问题。
图1.1功能模块图
第
2.1
用户根据屏幕上显示的操作提示输入要进行操作的模块,通过调用相对应的模块程序,达到用户所想进行操作。程序的总框架大致分为四个模块:1.建立城市无向图2.添加城市模块3.修改城市距离4.求最短路径。具体实现过程见2.2:建立城市无向图2.3:添加城市2.4:修改城市距离2.5:求最短路径。流程图过输入n,由n的值来选择调用相对应子函数,实现所选择的功能,调用完后可以返回调用主函数进行下一次选择,从而实现反复调用子函数而实现四个模块的功能等。
还有就是遗忘分号,逗号,解决方法就是,一步一步的把遗忘的分号,逗号补上。
忘记定义变量的类型。比i应该是整型的却忘记申明。解决方法就是在函数先申明int类型的i.。粗心导致很多细节问题,比如该输入英文的括号的,却输成中文的括号,解决方法,把中英文分开。注意细节问题。
3.3 调试末期
输入的数据无法找出正确的路径,解决方法,一步一步的调试,找出问题的所在,改正逻辑错误。在同学的帮助下,找到了逻辑错误,一步一步地改正,终于得到预期的结果。
图2.3添加城市流程图
否
是
否
是
是
2.
根据屏幕上的城市编号,输入想更改的城市编号。在进行该模块时会输出原来的距离。由于在现实生活中由于一些人为的测量误差或是一些自然因素,又或是城市整编等等一系列的因素需要改动原来的城市距离,此时应用该块修改的功能即可实现更改,且根据提示操作简单,用户具体可以参看第四章:测试及运行结果。流程图中p,q表示城市的编号,根据p和q可以找到对应的城市名称,找到对应的g.v[p][q].distance即是原来两城市间的距离。
图2.2构建城市无向图流程图
否
是
否
是
用户根据提示输入想要添加到无向图中的城市,根据屏幕中的提示输入与之邻接的城市间的距离,然后添加城市距离矩阵图中;同时将g.v[m][n].path赋值为-1即表示p城到q城有路可达且最短路径无需经过其他城市。需注意的是当g.v[m][n].distance=0表示p城到q城的距离为0,当g.v[m][n].distance=99999,则表示p城到q城距离无穷大即表示他们之间无路径可达,而当g.v[m][n].distance=k(0<k<99999)时表示他们间的距离是k。流程图中g.n表示当前图中存储的城市数量,dis表示输入的城市间的距离即q和g.n表示城市间的距离。通过q<g.n的条件判断来充分完成图对应的矩阵中的赋值。
课程设计任务书
课程设计名称
数据结构课程设计
专业
计算机科学与技术
(物联网方向)
学生
班级
学号
题目名称
最短路径求解
起止日期
2015
年
1
月
5
日起至
2015
年
1
月
16
日止
课设容和要求:
容:给出一无向图,图上的每个顶点表示一个城市,顶点间的边表示城市间存在路径,边上的权值表示城市间的距离。试编写程序求解从某一个城市出发到达任意其他任意城市的最短路径问题。
图2.1主模块流程图
2.
根据提示输入城市,对城市无向矩阵图进行初始化,开始g.v[m][n].path的路径值赋为-2表示p城到q城间中间没有可达的路径不经过其他城市,而g.v[m][n].distance赋值为0表示p到p的距离为0。流程图中的MAX表示的是最多的城市数量,其值为20;p,q表示城市的编号,而path和distance分别表示的路径和城市间距离。g.v[p][q].distace表示p、q代表的城市间的距离