matlab中图和队列

今天很不开心,因为用matlab实现之前自己c++中实现的一部分代码,需要用到几种数据结构,比如图,队列,一时间不知如何下手,几番来回思考,完美的解决了这个问题
1.关于图
图是一种表示节点之间拓扑关系的数据结构,常用的表示方法有邻接矩阵和邻接表,邻接矩阵是空间换时间的做法,鉴于计算机内存的飞速发展,以及我也比较懒,所以就直接在matlab中声明一个

graph = zeros(totalNum, totalNum); % 邻接矩阵

此时,每个元素为0或1,比如graph(i,j)就表示节点i与j是否为邻接关系(也即二者之间有一条边)。
但若是在c++中我是这样实现的

typedef std::map<int, float> Neighbors; //key for 节点序号,value for 节点间边的权重
struct Vertex // 这是节点的定义,它保存的是其邻接节点,这不正是图的本质么,精髓啊
{
   Neighbors neighbors;
};

typedef std::map<int, Vertex>  Vertices; // 表示所有节点,外层直接访问它来获取节点

 2.关于队列
stl中有queue,但matlab里没得啊,脑壳痛,于是想了一下,一开始我是这样实现的

queue = [];
queue(1) = []; % 出队
queue = [queue;val] % 入队

明眼人一看即知,这种实现会很慢,尤其是在对图做广度优先遍历的时候,没办法,发挥我的主观能动性,于是有了以下代码

queue = zeros(totalNum, 1); % 提前分好内存
queue(1) = initialVal; % 初值
queueTop = 1; % 队首
queueBack = 2; % 队尾,实际指向最后一个数的下一个
queue(1) = 0; queueTop = queueTop + 1; % 出队
queue(queueBack) = insertVal; queueBack = queueBack + 1; % 入队

实际上就是搞两个游标指向首尾,多简单,一时间忘了,不过经此一役,以后应该不会忘,哈哈!开心!

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Matlab中,可以使用一些属性来修改图形的外观和行为。其中一些常用的图元属性包括: 1. 'Color':指定图形的颜色,可以是预定义的颜色名称(如'red'、'blue'等)或RGB值。 2. 'LineStyle':指定线条的样式,可以是'-'(实线)、'--'(虚线)、':'(点线)等。 3. 'LineWidth':指定线条的宽度。 4. 'Marker':指定数据点的标记样式,如'+'、'o'、'*'等。 5. 'MarkerSize':指定数据点标记的大小。 6. 'MarkerFaceColor':指定数据点标记的填充颜色。 7. 'MarkerEdgeColor':指定数据点标记的边缘颜色。 除了这些基本属性之外,还可以使用其他属性来调整图形,例如设置图形的标题、坐标轴范围、刻度标签等。可以使用函数如'title'、'xlabel'、'ylabel'、'xlim'、'ylim'等来实现这些功能。 在子图中使用这些属性时,可以将属性设置应用于特定的图元,例如使用'plot'函数创建子图后,可以使用句点操作符(.)来指定特定的线条或标记进行属性设置,如'plot(x, y, "LineStyle", "--")'。 同时,在子图中添加标签、标题和网格时,可以使用与母图相同的方法,在对应的子图上调用相应的函数。 综上所述,Matlab中的图元属性包括颜色、线条样式、线条宽度、数据点标记样式和大小等,可以通过设置这些属性来调整图形的外观和行为。同时,在子图中也可以使用相同的属性设置以及添加标签、标题和网格。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值