最短路程问题 用C语言编写 会者请进 如答案可用,另有积分100相赠

来源:百度知道 编辑:UC知道 时间:2024/06/22 16:40:46
注:下图中123456表示城市,有的路只能单行,例如1可到2,但2到不了1。数字为交通费用,无表示无法直接到达或无法到达。问如何才能最节省交通费用?
1 2 3 4 5 6
1 无 50 无 10 无 无 ( 1-〉2:50 , 1-〉4:10,
2 无 无 10 15 50 无 2-〉3:10 )
3 无 无 无 无 35 无
4 20 无 无 无 无 无
5 无 20 30 15 无 无
6 无 无 无 无 3 无

大哥们谢谢帮帮忙,小弟我感激不尽。积分不是问题,如果看不懂请提问。
我只会初级的c语言,请写出来好么?钱不是问题?

我的题没抄错

对于可以双行的线路要输入两次:如2和四应该如下输入
2 4 15
4 2 15

/*************************************************/
/* 所有顶点对最短路径算法 */
/* 文件名floyd.c 函数名floyd1() */
/*************************************************/
#include "c_ljjz.c" /*引入邻接矩阵创建程序*/
typedef int dist[m][m]; /* 距离向量类型*/
typedef int path[m][m]; /* 路径类型*/

/*------------Floyd所有顶点对间的最短路径算法-----------*/
void floyd1(mgraph g,path p,dist d)
{ int i,j,k;
/*初始化*/
for (i=0;i<g.n;i++)
for (j=0;j<g.n;j++)
{ d[i][j]=g.edges[i][j];
if (i!=j && d[i][j]<FINITY ) p[i][j]=i; else p[i][j]=-1;
}
for (k=0;k<g.n;k++) /*递推求解每一对顶点间的最短距离*/
{ for (i=0;i<g.n;i++)
for (j=0;j<g.n;j++)
if (d[i][j]>(d[i][k]+d[k][j]))
{ d[i][j]=d[i][k]+d[k][j];
p[i][j]=k;
}