Floyd最短路算法的MATLAB程序.docx
《Floyd最短路算法的MATLAB程序.docx》由会员分享,可在线阅读,更多相关《Floyd最短路算法的MATLAB程序.docx(14页珍藏版)》请在冰豆网上搜索。
![Floyd最短路算法的MATLAB程序.docx](https://file1.bdocx.com/fileroot1/2023-4/19/ce4e017a-291a-47b1-9082-25d437823685/ce4e017a-291a-47b1-9082-25d4378236851.gif)
Floyd最短路算法的MATLAB程序
Floyd最短路算法的MATLAB程序
2006-08-1720:
14
%floyd.m
%采用floyd算法计算图a中每对顶点最短路
%d是矩离矩阵
%r是路由矩阵
function[d,r]=floyd(a)
n=size(a,1);
d=a;
fori=1:
n
forj=1:
n
r(i,j)=j;
end
end
r
fork=1:
n
fori=1:
n
forj=1:
n
ifd(i,k)+d(k,j) d(i,j)=d(i,k)+d(k,j);
r(i,j)=r(i,k)
end
end
end
k
d
r
end
void Dijkstral(int v0)
{
int i;
bool s[MAX_VEX];
for(i=0;i {
d[v0][i]=map[v0][i];
s[i]=false;
if((i!
=0)&&(d[v0][i] p[v0][i]=v0;
else
p[v0][i]=-1;
}
s[v0]=true;
d[v0][v0]=0;
for(i=0;i {
double min=INF;
int u=v0;
for(int j=0;j if(!
s[j]&&d[v0][j] {
u=j;
min=d[v0][j];
}
s[u]=true;
for(int w=0;w {
if((!
s[w])&&(d[v0][w]>d[v0][u]+map[u][w]))
{
d[v0][w]=d[v0][u]+map[u][w];
p[v0][w]=u;
}
}
}
}
Justin Hou
介绍
寻找最有价值路径(c语言)
描述:
从上(入口)往下行走,直到最下节点(出口)结束,将所经节点上的数值相加,要求找到一条最有价值路径(既是路径总数值最大)并输出总数值。
图:
入口 ↓
③
/\
⑤ ④
/ \ / \
① ② ⑤
\ / \ /
⑨ ⑧
\ /
③
出口 ↓
输入文件:
(abc.in)
第一行只有一个数n(1<=n<=199),且n为奇数,说明节点的层。
从第二行到底n+1行为每一层中各节点的数值(在0和100之间),各个数用空格隔开,输入不要求判错。
输出文件:
(abc.out)
只有一个数,为所求路径的价值数。
例子:
输入文件内容:
5
3
5 4
1 2 5
9 8
3
输出文件内容:
23
正文
/*
* File:
longest.c
* Desciption:
动态规划算法计算网络的最长路线和最短路线
* Created:
2001/12/2
* Author:
Justin Hou [mailto:
justin_hou@]
*
*/
#include
#define N 7 /* 顶点数目 */
#define I 999 /* 表示无穷大 */
int graph[N][N] = { /* 图的邻接矩阵 */
{I, 4, 5, 8, I, I, I},
{I, I, I, 6, 6, I, I},
{I, I, I, 5, I, 7, I},
{I, I, I, I, 8, 9, 9},
{I, I, I, I, I, I, 5},
{I, I, I, I, I, I, 4},
{I, I, I, I, I, I, I}
};
int List[N]; /* 存放拓扑序列 */
int TopologicalOrder(); /* 拓扑排序函数 */
void main() /* 主 函 数 */
{
int i, j, k, l;
int ee[N], el[N]; /* 最长最短距离 */
int path_e[N][N], path_l[N][N], n_e[N], n_l[N];
/* 记录路径数据 */
/* 初始化数据 */
for (i = 0; i < N; i++) {
n_e[i] = 0; /* 到 i 的最短路线的结点数 */
n_l[i] = 0; /* 到 i 的最长路线的结点数 */
ee[i] = I;
el[i] = 0;
}
ee[0] = el[0] = 0; /* 初始化头结点 */
path_e[0][0] = 0;
path_l[0][0] = 0;
n_e[0] = 1;
n_l[0] = 1;
/* 拓扑排序 */
if (!
TopologicalOrder())
return;
未完
Top
2楼atlantis13579(更深的蓝)(^_^)回复于2002-07-2115:
42:
06得分0
作者 Justin Hou
介绍
寻找最有价值路径(c语言)
描述:
从上(入口)往下行走,直到最下节点(出口)结束,将所经节点上的数值相加,要求找到一条最有价值路径(既是路径总数值最大)并输出总数值。
图:
入口 ↓
③
/\
⑤ ④
/ \ / \
① ② ⑤
\ / \ /
⑨ ⑧
\ /
③
出口 ↓
输入文件:
(abc.in)
第一行只有一个数n(1<=n<=199),且n为奇数,说明节点的层。
从第二行到底n+1行为每一层中各节点的数值(在0和100之间),各个数用空格隔开,输入不要求判错。
输出文件:
(abc.out)
只有一个数,为所求路径的价值数。
例子:
输入文件内容:
5
3
5 4
1 2 5
9 8
3
输出文件内容:
23
正文
/*
* File:
longest.c
* Desciption:
动态规划算法计算网络的最长路线和最短路线
* Created:
2001/12/2
* Author:
Justin Hou [mailto:
justin_hou@]
*
*/
#include
#define N 7 /* 顶点数目 */
#define I 999 /* 表示无穷大 */
int graph[N][N] = { /* 图的邻接矩阵 */
{I, 4, 5, 8, I, I, I},
{I, I, I, 6, 6, I, I},
{I, I, I, 5, I, 7, I},
{I, I, I, I, 8, 9, 9},
{I, I, I, I, I, I, 5},
{I, I, I, I, I, I, 4},
{I, I, I, I, I, I, I}
};
int List[N];