根据图的信息创建邻接矩阵(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);

注:程序结构

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

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值