【参数说明】
F 表示所给的图的矩阵
W 表示程序运行结束后的结果,即转换后的结果
当 f=0 时,实现邻接矩阵转换为关联矩阵,此时F为邻接矩阵,W为关联矩阵
当 f=1 时,实现关联矩阵转换为邻接矩阵,此时F为关联矩阵,W为邻接矩阵
【matlab program】
无向图
% 无向图的关联矩阵与邻接矩阵的相互转换
function W = incandaf(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 = i:n
if F(i,j) ~= 0
W(i,k) = 1; % 给边的始点赋值1
W(j,k) = 1; % 给边的终点赋值1
k = k+1;
end
end
end
elseif f == 1
m = size(F,2);
n = size(F,1);
W = zeros(n,n);
for i = 1:m
a = find(F(:,i) ~= 0);
W(a(1),a(2)) = 1; % 存在边,则邻接矩阵的对应值为1
W(a(2),a(1)) = 1;
end
else
fprint('please input the right value of f!');
end
W;
有向图
%% 有向图的关联矩阵和邻接矩阵相互转换
function W = mattransf(F,f)
if f == 0
m = sum(sum(F));
n =size(F,1);
W = zeros(n,m);
k = 1;
for i = 1:n
for j = i:n
if F(i,j) ~= 0
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,n);
for i = 1:m
a = find(F(:,i) ~= 0);
% if F(a(1),i) == 1
% W(a(1),a(2)) = 1; % 存在边,则邻接矩阵的对应值为1
% else
% W(a(2),a(1)) = 1;
% end
if isempty(a) ~= 1
for j = 1:length(a)
if F(a(j),i) == 1
W(a(1),a(2)) = 1;
else
W(a(2),a(1)) = 0;
end
end
end
end
else
fprint('please input the right value of f!');
end
W;