利用Matlab实现【图论】中的图

目录

前言

一、图论是什么?

1.基本概念

2.表达形式

二、使用matlab作图

1.作无向图

2.作有向图

总结



前言

本文将讲解如何使用matlab中的函数实现最短路径算法,所提供代码仅供参考,严禁用于数模比赛中使用!


一、图论是什么?

在学习最短路径算法前,我们先了解一个基本概念——【图论】

1.基本概念

图论( Graph Theory )是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表
事物
,用连接两点的线表示相应两个事物间具有这种关系

 

  • 在图论中,每个节点称为顶点,如图中的1,2,3···; 连线称为边,边上标出的数字为边的权重(权重和线段的长度无关)。这里的图是我们从实际问题中抽象出来的模型,图上画的直线是为了简化问题,如果是表示两点间的道路的话,实际上可能是弯曲的

  • 顶点我们常用点集V表示,边用边集E表示,权重(点i和点j之间)—wij,图用顶点和边的集合G=(V,E)表示

  • 图中的边如果是单向箭头,表示有方向,构成的图称为有向图,如示例中的城市路线,是有方向的

  • 如果图里的边没有箭头,只有线,表示双向,构成的图称为无向图,比如通信光缆之类

  • 注意:权重不仅可以表示长度之类的,也可以表示时间、费用等概念

2.表达形式

我们通常使用邻接矩阵来表示顶点间的关系

邻接矩阵𝑊中第𝑖行第𝑗列的元素𝑤𝑖j :元素的下标表示顶点i—>j之间的关系,大小表示这两个点之间连线的权重。


二、使用matlab作图

1.作无向图

利用graph函数

%%matlab作无向图
clear,clc
%(1)无权重,(每条边的权重默认为1)
%函数graph(s,t);可在s和t中的对应节点之间创建边,并且生成一个图
%s 和 t都必须具有相同的元素数:这些节点必须都是从1开始的正整数,或都是字符串元胞数组
%编号最后从1开始,不要瞎编
s1=[1,2,3,4];
t1 = [2,3,1,1];
G1 = graph(s1,t1);
plot(G1)
% 下面的命令是在画图后不显示坐标
set(gca,'XTick',[],'YTick',[]);

如果我们想用文字描述顶点的话,可以使用元胞数组 

%注意字符串元胞数组是用大括号包起来的
s2={'学校','电影院','网吧','酒店'};
t2={'电影院','酒店','酒店','KTV'};

如果我们想设置每条边上的权重,可以直接加上权重向量即可或者使用邻接矩阵 a

w = [3,8,9,2];
G = graph(s,t,w);
%G.Edges.weight 表示图形对象G中所有边的权重值,'EdgeLabel'表示在图形上显示这些权重值
plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
%有权重利用邻接矩阵绘图

% a=[0,3,9,2;
%    3,0,8,0;
%    9,8,0,0;
%    2,0,0,0];
%因为无向边两条边不管哪个点在前边上的权重都是一样的
a=[0,3,9,2;
   0,0,8,0;
   0,0,0,0;
   0,0,0,0];
%'upper'仅使用上三角矩阵来构造图
G = graph(a,'upper');

注意:这里每个顶点之间的边和权重都要一一对应!


2.作有向图

利用digraph函数

有向图和无向图的作法几乎相同,只不过是用digraph函数代替了graph函数

%%Matlab作有向图
%无权图 digraph(s,t)
s3=[1,2,3,4,1];
t3=[2,3,1,1,4];
G = digraph(s3,t3);
plot(G);
set(gca,'XTick',[],'YTick',[]);

%有权图 digraph(s,t,w)
w3=[2,4,5,10,5];
G = digraph(s3,t3,w3);
plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
set(gca,'XTick',[],'YTick',[]);

%利用邻接矩阵a digraph(a)
a = [0,3,0,0;
     0,0,8,0;
     9,0,0,0;
     2,0,0,0];
%给每个顶点标注名称,int2str([1:4]')将整数1到4四个数转化为字符
s=cellstr(strcat('顶点',int2str((1:4)')));
%strcat把字符串水平串联起来
%strcat('顶点',int2str((1:4)'))把顶点和字符1到4拼起来
G = digraph(a,s);
plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
set(gca,'XTick',[],'YTick',[]);

总结

完结撒花🎇🎇🎆🎆👍

本文讲解了什么是图论以及如何利用Matlab创建图,有任何问题和补充欢迎大家留言

如果对你有帮助的话记得点赞,收藏,关注哟!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自由的风.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值