永发信息网

floyd算法导游问题

答案:1  悬赏:50  手机版
解决时间 2021-03-19 21:20
floyd算法导游问题
最佳答案
因为你只记录了u是否是k到j的最短路径上的点。。。并没有记录他们的相对顺序啊


试一下这个代码可以不

void PrintShortestPath(const MGraph* G, int(&p)[10][10][10], int st, int ed) {
int i;
for (i = 0; i < G->vexnum; i++) {
if (i != st && i != ed && p[st][ed][i]) {
PrintShortestPath(G, p, st, i);
PrintShortestPath(G, p, i, ed);
return;
}
}
printf("-->%s", G->vexs[ed].name);
}

void Floyd(MGraph *G)
//用Floyd算法求图中各对顶点v和w之间的最短路径P[v][w]及其
//带权长度D[v][w]。若P[v][w][u]为1,则u是从v到w当前求得最短
//路径上的顶点。
{
int v, u, i, w, k, j, flag = 1, p[10][10][10], D[10][10];
for (v = 0; v < G->vexnum; v++)  //各对结点之间初始已知路径及距离
for (w = 0; w < G->vexnum; w++)
{
D[v][w] = G->arcs[v][w].adj;
for (u = 0; u < G->vexnum; u++)
p[v][w][u] = 0;
if (D[v][w] < INFINITY)
{
p[v][w][v] = 1; p[v][w][w] = 1;
}
}
for (u = 0; u < G->vexnum; u++)
for (v = 0; v < G->vexnum; v++)
for (w = 0; w < G->vexnum; w++)
if (D[v][u] + D[u][w] < D[v][w])   //从v经u到w的一条路径更短
{
D[v][w] = D[v][u] + D[u][w];   //修改权值
for (i = 0; i < G->vexnum; i++)
p[v][w][i] = p[v][u][i] || p[u][w][i];
}
while (flag)
{
printf("请输入出发点和目的地的编号:");
scanf("%d%d", &k, &j);
if (k<0 || k>G->vexnum || j<0 || j>G->vexnum)
{
printf("景点编号不存在!请重新输入出发点和目的地的编号:");
scanf("%d%d", &k, &j);
}
if (k >= 0 && k < G->vexnum&&j >= 0 && j < G->vexnum)
flag = 0;
}
printf("%s", G->vexs[k].name);
PrintShortestPath(G, p, k, j);
printf(" 总路线长%dm
", D[k][j]);

}//Floyd end
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三支香点着了各不一样长?
新城北路/新城街(路口)地址在哪,我要去那里
算命先生说我爸活不到59,我很害怕,怎么办啊
若-2x+m=√(1-2x)有值,则m的取值范围
奥迪a4l朱鹭白的漆好么?会变旧么?男生20几
19岁男生喜欢穿这种睡衣睡觉,怎么办呢?
哪家影楼可以拍像cos play那样的艺术照?
唉声叹声的近义词
业余爱好摄影,用什么软件制作视频好?
我的电脑配置是amd5000+微星740g 开四核了 为
一阵()的琴声,括号中填什么形容词比较好?
住旅馆一月,房租九百块钱能租吗?
庭院铜门每平方米价格多少
上海市虹口区东体育会路411号怎么走
31号从上海南站到萧山汽车总站
推荐资讯
百合和竹都插在水中怎么养???
多选题关于天然放射现象和对放射性的研究,下
ios怎么看系统更新日志的最新相关信息
请教懂行的人,前几天我买了一辆嘉陵电动车,
codol夺宝大战全部要多少钱
圆的繁体字怎么写
甜酸葱头怎么腌制 跪求各位朋友 要详细的 步
蚯蚓有再生能力吗?
办残疾人土证每个月有多少钱拿
八月是什么星座的
祁强发光字在什么地方啊,我要过去处理事情
柳岸茶吧怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?