图论算法matlab实现问题怎么用matlab把邻接矩阵F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0];转为关联矩阵求算法.

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 15:50:19
图论算法matlab实现问题怎么用matlab把邻接矩阵F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0];转为关联矩阵求算法.

图论算法matlab实现问题怎么用matlab把邻接矩阵F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0];转为关联矩阵求算法.
图论算法matlab实现问题
怎么用matlab把邻接矩阵F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0];转为关联矩阵
求算法.

图论算法matlab实现问题怎么用matlab把邻接矩阵F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0];转为关联矩阵求算法.
参考楼上给的链接,稍微做了一点修改,供参考.

修改的地方包括:
1、原程序为函数,提供了邻接矩阵和关联矩阵的双向转换,这里针对楼主的需求改为脚本,直接运行即可将邻接矩阵转为关联矩阵.
2、部分语句修改更符合MATLAB的通行写法,如:
sum(sum(F))改为sum(F(:)),
W(i,k)=1; W(j,k)=1;改为W([i j],k)=1;
3、考虑到邻接矩阵为对称阵,第二个for循环改为只针对半个矩阵,减少计算量(对于楼主的这个具体作用微乎其微).
4、原程序有错误,在else分支fprint为fprintf之误(其实我看到该程序的第一眼就注意到了这个错误,担心还存在其它问题,所以进行了改写).

F=[0 1 1 1;1 0 1 1;1 1 0 1;1 1 1 0]; % 邻接矩阵
m = sum(F(:))/2; % 图的边数
n = size(F,1); % 顶点数

W = zeros(n,m);
k=1;
for i = 1:n
for j = 1:i
if F(i,j)~=0
W([i j],k)=1;
k = k + 1;
end
end
end
W

%% **********无向图邻接矩阵与关联矩阵的转换********************
% 输入参数:F 邻接矩阵或关联矩阵 f转换参数,0表示邻接矩阵转换为关联矩阵 //
% 1表示关联矩阵转换为邻接矩阵 //
% 输出: W 转换所...

全部展开

%% **********无向图邻接矩阵与关联矩阵的转换********************
% 输入参数:F 邻接矩阵或关联矩阵 f转换参数,0表示邻接矩阵转换为关联矩阵 //
% 1表示关联矩阵转换为邻接矩阵 //
% 输出: W 转换所得矩阵 //
%%
function W = incandadf(F, f) %邻接矩阵转换为关联矩阵
if f == 0
m = sum(sum(F))/2; %计算图的边数,握手定理
n = size(F,1); %顶点数

W = zeros(n,m);
k=1;
for i = 1:n
for j=1:n
if F(i,j)~=0 && j>i
W(i,k)=1;
W(j,k)=1;
k = k + 1;
end
end
end
elseif f==1 %关联矩阵转换为邻接矩阵
m = size(F,2);
n = size(F,1);
W = zeros(n);
for i=1:m
a = find(F(:,i)~=0);
W(a(1),a(2))=1;
W(a(2),a(1))=1;
end
else
fprint('Please input the right value of f');
end

收起

网上有代码
http://blog.csdn.net/koppp1412/article/details/6324270