导航:首页 > 源码编译 > matlab定义floyd算法

matlab定义floyd算法

发布时间:2022-05-24 05:19:19

⑴ matlab floyd 算法注释

A矩阵是邻接矩阵,对角线上为o,其余位置数字表示的是两点之间距离,比如A(1,2)=2,表示从第一个点到第二个点的距离为2.inf是无穷大的意思,这里表示没有直接沟通这两点的路。
n=length(D);设定n为D矩阵的长度。
接下来的两重循环,得到的R矩阵是n*n的矩阵,它每个数据表示的是路径,比如:R(1,3)=1;表示路径为:1-1-3.这里是初始化路径了。
后面的三重循环是floyd算法的关键所在,就是更新路线了。里面的那个判断指的是:
假设有3个点,1
2
3;如果我从1-2-3之间总距离小于1-3的距离,那么我R(1,3)=2;这就是选取更近的路线了。
最后的两个判断是为了不让曾经走过的点再次被遍历。就是不回头的意思了,这个一般都可以忽略了,你照打上去就是了。
不知道这样的解释你是否满意。

⑵ 求matlab高手,帮我解决一下floyd算法!!急急急

//假期在家做的,网上这类算法很多,思想都差不多
#include<iostream>
using namespace std;
int N; //顶点个数
int max = 10000; //max代表两点之间没有路径存在
float ** inPut(){
int edge,m,n,w,i;
cout<<"请输入顶点数:";
cin>>N;
N = N+1; //矩阵(数组)下标从1开始计数,方便操作
float **C = new float*[N]; //矩阵C为图的初始邻接矩阵
for(i = 1; i<N; i++)
*(C+i) = new float[N];

for( i = 1; i<N; i++) //邻接矩阵初始化
for(int j = 1; j<N; j++){
if(i == j)
C[i][j] = 0; //矩阵对角线上的值初始为0,其他为max
else C[i][j] = max;
}

cout<<"请输入边数:";
cin>>edge;
cout<<"请输入边及权值:"<<endl;
for(i = 0; i<edge; i++){
cin >> m >> n >> w;
C[m][n] = w;
}
return C;
}
void Floyd(float **C){
int i,j;
float **A = new float*[N]; //矩阵A最终存放修改后的路径长度
int **path = new int*[N]; //矩阵path记录两点之间的路径
for(i = 1; i<N; i++)
*(A+i) = new float[N];
for(i = 1; i<N; i++)
*(path+i) = new int[N];
for(i = 1; i<N; i++) //设置矩阵A和path的初值
for(j = 1; j<N; j++){
if(C[i][j] != max)
path[i][j] = j; //存在路径,记录下终点下标值
else path[i][j] = -1; //不存在路径用-1表示

A[i][j] = C[i][j];
}
//修改路径长度(矩阵A)和路径(矩阵path)
for(int k = 1; k<N; k++) //试图将顶点k扩充到最短路径path矩阵中
for(i = 1; i <N; i++)
for(j = 1; j<N; j++)
if( A[i][j] > ( A[i][k]+A[k][j] ) ){//判断顶点i到j的权值是否大于从i经k到j的权值,取二者较小者记录下来
A[i][j] = ( A[i][k]+A[k][j]);
path[i][j] = path[i][k]; //记录下中间顶点k值
}

cout << endl << endl;
cout << "初始邻接矩阵C[N][N]" << endl;
for( i = 1; i<N; i++){
for(j = 1; j<N; j++){
cout << C[i][j] << "\t";
}
cout << endl;
}
cout << endl << endl;
cout << "修改后的路径长度矩阵" << endl;
for( i = 1; i<N; i++){
for(j = 1; j<N; j++){
cout << A[i][j] << "\t";
}
cout << endl;
}
cout << endl;
cout << endl;
cout<<"路径矩阵"<<endl;
for( i = 1; i<N; i++){
for(j = 1; j<N; j++){
cout << path[i][j] << "\t";
}
cout << endl;
}
cout << endl << endl;
cout << "所有顶点对之间的最短路径的权值及其路径" << endl;
for(i = 1; i<N; i++){
cout << endl;
for(j = 1; j<N; j++){
cout << A[i][j] << "\t"; //输出i-->j的权值
int next = path[i][j]; //顶点i到j的路径,i后的第一个后继顶点
if(next == -1) //路径不存在
cout << i << " 到 " << j << " 没有路径" << endl;
else {
cout<<i; //起点
while(next != j){ //i、j之间存在中间顶点
cout << "-->" << next;
next = path[next][j]; //寻找下一个中间顶点
}
cout << "-->" << j << endl; //终点
}
}
}
}
int main(int argc, char* argv[]){
float **C;
C = inPut(); //邻接矩阵的初始化
Floyd(C);
return 0;
}
/*
1 2 10
1 4 30
1 5 100
2 3 50
3 5 10
4 3 20
4 5 60
*/

⑶ 关于MATLAB。floyd算法的求助

这个是M文件中的函数啊,只有运行在主界面并且这样运行:
floyd(a)(把a输入括号这里才行)
单独运行当然没有定义a啊
%floyd.m
%采用floyd算法计算图a中每对顶点最短路
%d是矩离矩阵
%r是路由矩阵
function
[d,r]=floyd(a)
n=size(a,1);
d=a;
for
i=1:n
for
j=1:n
r(i,j)=j;%原始默认路径都是各节点间直接到达的距离
end
end
r
for
k=1:n
for
i=1:n
for
j=1:n
if
d(i,k)+d(k,j)
d(i,j)=d(i,k)+d(k,j);%这里是不是输入错了?看不懂中间为甚么有个空格;
但总体意思是说如果从i节点先到k节点再到j节点间距离比从i直接到j要近的话就替换掉原先那条路径
r(i,j)=r(i,k)
end
end
end
k
d
r
end

⑷ floyd算法matlab

a矩阵是邻接矩阵,对角线上为o,其余位置数字表示的是两点之间距离,比如a(1,2)=2,表示从第一个点到第二个点的距离为2.inf是无穷大的意思,这里表示没有直接沟通这两点的路。
n=length(d);设定n为d矩阵的长度。
接下来的两重循环,得到的r矩阵是n*n的矩阵,它每个数据表示的是路径,比如:r(1,3)=1;表示路径为:1-1-3.这里是初始化路径了。
后面的三重循环是floyd算法的关键所在,就是更新路线了。里面的那个判断指的是:
假设有3个点,1
2
3;如果我从1-2-3之间总距离小于1-3的距离,那么我r(1,3)=2;这就是选取更近的路线了。
最后的两个判断是为了不让曾经走过的点再次被遍历。就是不回头的意思了,这个一般都可以忽略了,你照打上去就是了。
不知道这样的解释你是否满意。

⑸ matlab实现弗洛伊德算法的代码,。

function
[d,r]=floyd(a)
%floyd.m
%采用floyd算法计算图a中每对顶点最短路
%d是矩离矩阵
%r是路由矩阵
n=size(a,1);
d=a;
for
i=1:n
for
j=1:n
r(i,j)=j;
end
end
r
for
k=1:n
for
i=1:n
for
j=1:n
if
d(i,k)+d(k,j)

评论
0

0

0

加载更多

⑹ 想用Matlab中floyd算法求最短路径,可是不太会使用MATLAB2014怎么办怎么导入Excel表进去

可以用下列命令,将Excel导入数组A中
A=xlsread('1.xls');
x=A(:,1); Excel第一列数值储存到x列矩阵
y=A(:,2); Excel第二列数值储存到x列矩阵
z=A(:,3); Excel第三列数值储存到x列矩阵
。。。。。。
用xlswrite('2..xls', M),将数组M写入2..xls中

⑺ Floyd算法怎么用MATLAB编写

这个是M文件中的函数啊,只有运行在主界面并且这样运行: floyd(a)(把a输入括号这里才行) 单独运行当然没有定义a啊 %floyd.m %采用floyd算法计算图a中每对顶点最短路 %d是矩离矩阵 %r是路由矩阵 function [d,r]=floyd(a) n=size(a,1); d=a; for i=...

⑻ matlab实现floyd算法 已知距离矩阵和权值矩阵 求最短路径

希望可以帮到你。

function [D,path]=floyd(a)
n=size(a,1);
D=a;
path=zeros(n,n);
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j;
end
end
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)<D(i,j)
D(i,j)=D(i,k)+D(k,j);
path(i,j)=path(i,k)
end
end
end
end

function [L,R]=router(D,path,s,t)
L=zeros(0,0);
R=s;
while 1
if s==t
L=fliplr(L);
L=[0,L];
return
end
L=[L,D(s,t)];
R=[R,path(s,t)];
s=path(s,t);
end

⑼ 你会不会matlab中的floyd算法,能不能编写一个程序那个具体怎么调用那个已经编写好的程序呢

这是一个我写的Floyd算法的程序。w是图的邻接矩阵需要事先输入并保存在工作空间中,调用方法为:[D,path]=floyd(w)。给出的结果D为路径的邻接矩阵,path为路径所经过的端点顺序。

程序为:
function [D,path]=floyd(w)
%D R a
n=size(w,1);
%设初值
D=w;
path=zeros(n);
for i=1:n
for j=1:n
if D(i,j)~=inf
path(i,j)=j;
end
end
end
%迭代,更新D path
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j)<D(i,j)
D(i,j)=D(i,k)+D(k,j);
path(i,j)=path(i,k);
end
end
end
end

⑽ 求解答以下Matlab Floyd算法代码的含义

暴力循环搜索。如果i,j之间存在k,使得i到j的距离大于i到k的距离加上k到j的距离,说明i-->k--j距离短,并把最短距离赋值给dij。很经典的最短路程序,只需要把距离矩阵套进去就行。

阅读全文

与matlab定义floyd算法相关的资料

热点内容
程序员共享网站 浏览:935
搬家服务app怎么开发 浏览:414
腾讯云外卖服务器 浏览:154
单片机1602显示程序 浏览:255
php检测网络 浏览:336
程序员面试金典第6版 浏览:718
内存2g编译安卓 浏览:414
单片机小数点怎么亮 浏览:414
安卓手机怎么设置健康码双击两下就出来 浏览:266
同一个文件夹可以存在两个相同的文件吗 浏览:535
动态重编译jit 浏览:132
android蓝牙音频 浏览:451
mc国际版怎么加服务器 浏览:816
phphtaccess配置 浏览:747
dos命令锁定 浏览:486
python中调换数据位置 浏览:300
武汉市中石油加油什么APP优惠 浏览:545
程序员33岁以后的规划 浏览:858
招标文件加密流转 浏览:897
源码数据盈利可信吗 浏览:860