求高手修改程序,求最长路径,即求最短路径分析的,边权值取相反数。程序如下:

数据结构第19讲_关键路径与最短路径_C_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
数据结构第19讲_关键路径与最短路径_C
上传于||文档简介
&&数​据​结​构​,​系​统​教​程​,​C​语​言​,​信​息​学​,​N​O​I​P
大小:693.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢1028人阅读
转载本博客上原创文章者,请注明出处。
Bellman-Ford算法可以用来解决所要求的最短路径的图中含有负数边的情形。
算法的基本思想:如果两个结点间存在最短路径,那么这条路径中各个结点最多经过一次(因为如果超过一次,说明路径中有环,如果是正数环,会使路径权值增长;若为负数环,最短路径不存在;若为零环,不影响结果)。因此我们只需迭代n-1次,将起始点到其他各点最多经过n-1条边的最短路径求出来即可。
#include &iostream&
const int MaxSize=10;
int arr[MaxSize][MaxSize];
int dist[MaxSize]; //保存起点到各结点最短路径的数组
int path[MaxSize]; //数组元素保存最短路径中经过的前一个结点
int numNode=0;
void createArr()
for(int i=0;i&numN++i)
for(int j=0;j&numN++j)
cin&&arr[i][j];
//计算任意权值的最短路径的Bellman-Ford算法
//从顶点v找到所有其他定点的最短路径
void BellmanFord(const int v)
//dist数组和path数组的初始化
for(int i=0;i&numN++i)
dist[i]=arr[v][i];
path[i]=v;
path[i]=-1;
//最多迭代n-1次
for(int len=2;len&numN++len)
for(int u=0;u&numN++u)
//每次都以u为终点,看以i为中转点到达u的总权值是否比dist[u]小,
//小的话改写dist[u]
for(int i=0;i&numN++i)
if(dist[u]&dist[i]+arr[i][u])
dist[u]=dist[i]+arr[i][u];
path[u]=i;
//输出起始结点到各结点的最短路径
for(int i=0;i&numN++i)
cout&&dist[i]&&& &;
//输出最后一个结点最短路径经过的各结点(其他结点可用类似做法)
int end=numNode-1;
while(path[end]!=-1)
cout&&path[end]&&& &;
end=path[end];
int main()
createArr();
BellmanFord(0);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:52476次
排名:千里之外
原创:30篇
评论:16条
(1)(4)(1)(3)(1)(11)(12)(1)最短路径_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上传于||文档简介
&&C​语​言​最​短​路​径​问​题
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
你可能喜欢第三方登录:以下试题来自:
问答题带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假定从初始顶点到目标顶点之存在路径,现有一种解决该问题的方法:
(1)设最短路径初始时仅包含初始顶点,令当前顶点u为初始顶点。
(2)选择离u最近且尚未在最短路径中的一个顶点v,加入到最短路径中,修改当前顶点u=v。
(3)重复步骤(2),直到u是目标顶点时为止。
请问上述方法能否求得最短路径 若该方法可行,请证明之;否则,请举例说明。 参考答案该方法求得的路径不一定是最短路径。例如,对于下图所示的带权图,如果按照题中的原则,从A到C的最短路径为A→B→C,事实上其最...
你可能感兴趣试题
1A.气泡排序B.插入排序C.选择排序D.二路归并排序2A.文件符号名B.文件路径名C.内存索引结点的指针D.文件描述符3A.暂停正在运行的程序B.暂停对内存的访问C.暂停CPU运行D.暂停I/O设备的输入或输出4A.最佳适应算法B.最坏适应算法C.循环适应算法D.最先适应算法5A.数据链路层B.网络层C.传输层D.应用层
热门相关试卷
最新相关试卷

我要回帖

更多关于 最短路径分析 的文章

 

随机推荐