邻接矩阵与关联矩阵的转换及实现

来源:互联网 发布:淘宝切图模块切图失败 编辑:程序博客网 时间:2024/05/01 21:44

【参数说明】
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:        for j = i:n            if F(i,j) ~= 0                W(i,k) = 1; % 给边的始点赋值1                W(j,k) = 1; % 给边的终点赋值1                k = k+1;            end        end    endelseif 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;    endelse    fprint('please input the right value of f!');endW;

有向图

%% 有向图的关联矩阵和邻接矩阵相互转换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    endelseif 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    endelse    fprint('please input the right value of f!');endW;
0 0