根据图的信息创建邻接矩阵(MATLAB实现)

问题描述

带权无向图的顶点数目为v,边数为e,当v较大时,其邻接矩阵v*v元素数目很多,手动创建过于麻烦。

解决方法

step.1

根据图中的所有边(每一条边都包含2个顶点i、j,以及边的权值w),

创建一个文本文件tu.txt,共e行3列,

第1列为i,第2列为j,第3列为w,

每一行为图中一条边的信息。

step.2

编写MATLAB函数,

输入:顶点数、边数、e行3列的矩阵B(B根据tu.txt生成)

输出:图的邻接矩阵G

function [G] = adjacentmatrix(v,e,B)
%   根据带权无向图的所有边组成的矩阵B,生成图的邻接矩阵G
G=inf(v);
for i=1:v
    for j=1:v
        if i==j
            G(i,j)=0;
        end
        for m=1:e
           if B(m,1)==i && B(m,2)==j 
               G(i,j)=B(m,3);
           elseif B(m,1)==j && B(m,2)==i
               G(i,j)=B(m,3);
           end
        end
    end
end

end

step.3

执行主函数main

clear
clc
v=39;%顶点个数
e=54;%边数
%% 生成图的邻接矩阵G
fileID=fopen('tu.txt');%tu.txt文件每一行为(顶点1,顶点2,边的权值)
A=textscan(fileID,'%f %f %f');
fclose(fileID);
B=cell2mat(A);

G=adjacentmatrix(v,e,B);

注:程序结构

下面的三个文件需放在同一文件夹下

猜你喜欢

转载自blog.csdn.net/Seattle_night/article/details/128591645