永发信息网

floyd算法中输出最短路径序列的C语言代码

答案:2  悬赏:20  手机版
解决时间 2021-02-10 01:36
本人已经用floyd算法编好了求有向图最短路径的程序,存储结构是矩阵,可是我实在想不出怎样输出每条最短路径的顶点序列,希望高手指教,不懂者勿扰。
最佳答案
void path(int i,int j)
{
int k;
if(P[i][j][i]==FALSE)
printf("There's no path!");
return;
for(k=0;k if(P[i][j][k]==TRUE)
{
path(i,k);
path(k,j);
break;
}
}
void print(){
int v,w,u,i;
for (v=0;v {
for (w=0;w printf(" %d ",D[v][w]);
printf("\n");
}
printf("Please input the tailvex v1 and headvex v2:");
scanf("v1=%d,v2=%d",&v,&w);
path(v,w);
}
以上两段应该对你有用。
全部回答
floyd是动态规划的简化,所以输出路径一样套用dp的典型记录方式即可. 即,每次松弛时,记录是松弛了哪一个点.然后输出时递归输出即可. 弄一个矩阵r[][]初始化为0,然后比如你的距离矩阵是d[][] 松弛改为是: if(d[i][j] > d[i][k]+d[k][j]){ d[i][j] = d[i][k]+d[k][j]; r[i][j] = k; } 输出时可以写一个递归函数 function out(a,b){ if(r[a][b] == 0){ return; } out(a,r[a][b]); //输出k out(r[a][b],b); } 这样只需调用out(a,b)即可输出a,b之间的最短路径节点序列. 说明一下,我对c并不熟悉,这些代码都是我凭印象写的,估计有不少语法错误,你就看做是伪代码好了.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
申通快递(起凤路佳美日用百货对面)地址好找么
天下3哪个职业最省钱
名著阅读。(1)《水浒传》写的是以________
申通快递(梅新路与东山北路交叉口西侧)地址在
金宝水产有限公司这个地址在什么地方,我要处
品潮造型地址在哪,我要去那里办事
西气东输的西段与我国古代“丝绸之路”的路径
独立本科段入学时间和专科一样吗
人们说的鬼压身,在床上不能动,是怎么搞的?
韩王村在什么地方啊,我要过去处理事情
请问结婚一年半。没有结婚证。男方拿彩礼4万
用招行的信用卡在农行的ATM机上取现 收手续费
申通快递(友谊广场华银KTV东边)怎么去啊,我
新蔡县驻马店圣宠宠物(河南新蔡店)地址在哪里
Post私人甜点在哪里啊,我有事要去这个地方
推荐资讯
梦幻西游五开盘丝怎么加点 ?
维维摄影(玉琳路214号维维摄影)地址在哪,我
幸多禄村地址好找么,我有些事要过去
我的电脑突然关机就再也开不了!在开电源里面
世界上为什么会有黄黑白三种肤色的人?请用地
溧河物流园到张衡路/仲景路(路口)怎么
奇瑞汽车(人民路名郡36墅旁)地址在什么地方,
vivo xshot手机死机了怎么办
九江市振兴建筑配套工程有限公司我想知道这个
洗脸盆下面的水管拆了怎么装不上
养老保险要交多少年如果中途断掉怎么办
天干地支是哪些说法
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?