MATLAB读取csv文件显示有向/无向图和目标路径(用于路径搜索算法的展示)

本文介绍了如何使用MATLAB读取由C++生成的csv文件,展示有向和无向图以及目标路径。通过将C++生成的邻接矩阵和路径序列存储在csv中,然后在MATLAB中进行读取和绘图,展示了不同规模的图和路径,包括无向图和有向图的示例。
摘要由CSDN通过智能技术生成

MATLAB读取csv文件显示有向/无向图和目标路径——用于路径搜索算法的展示

在我的上一篇博文按要求自动生成无向/有向图(基于C++实现)中,已经生成了我需要的图,接下来我准备编码实现各种路径搜索算法,但在此之前,我需要能够有效的展示(即绘制)我生成的图以及最终求得的目标路径,在研究之后,一开始是准备用Python调用c++代码的方式来显示图和路径,但是这种方法比较难,我暂时未弄清楚,因此退而求简单的方法,首先用VS编辑c++代码产生图和路径,然后将图和路径存储在csv文件中,最后利用MATLAB来读取文件获得图和路径并绘制。

c++生成有向/无向图以及路径

具体生成图的方法以及代码可以参考博文按要求自动生成无向/有向图(基于C++实现),在生成图信息之后,直接将邻接矩阵存储到csv文件中,具体代码如下:

void Graph::printToCSV()
{
   
	FILE* fd = NULL;
	if ((fd = fopen("map.csv", "wt+")) != NULL)
	{
   
		//存储基本信息
		fprintf(fd, "%s,%s,%s\n", "type 1:no-directed 2:directed", "Node_counts", "Edge_counts");
		fprintf(fd, "%d,%d,%d\n",type,Node_counts,Edge_counts);
		//存储节点信息
		for (int i = 0; i < Node_counts; i++)
		{
   
			for (int j = 0; j < Node_counts; j++)
			{
   
				if (Map[i][j] >= MaxLen)
					fprintf(fd, "%3.2f,", 0);
				else
					fprintf(fd, "%3.2f,", Map[i][j]);
			}
			fprintf(fd, "\n");
		}
		

	}
	fclose(fd);
	fd = NULL;

}

map.csv文件存储图的邻接矩阵,其内容举例如下:
在这里插入图片描述
path.csv文件存储路径的节点序列,只有一行,其内容举例如下:
在这里插入图片描述

MATLAB代码

参考了两篇文章:
1、【Matlab学习手记】绘制带箭头直线
2、matlab练习程序(矩阵生成无向网络图) - Dsp Tian - 博客园
代码如下:

%% 显示有向图、无向图以及路径
function ShowGraphFormCsv(graph_file_addr,path_file_addr)
%graph_file_addr 图信息文件地址 如:'C:\Users\YW\source\repos\Create_random_graph\Create_random_graph\map.csv' 
%path_file_addr 目标路径文件地址 如:'C:\Users\YW\source\repos\Create_random_graph\Create_random_graph\path.csv' 
%判断参数多少
switch nargin
    case 1
        show_path = 0;
    case 2
        show_path =1;

end
%不显示路径
if(show_path~=1)
     
%1、获取数据
%graph返回的是文件中的图信息,txt输出的是文本内容,raw输出的是未处理数据
[graph,txt1,raw1]=xlsread(graph_file_addr) ;
%path返回的是文件中的路径,txt输出的是文本内容,raw输出的是未处理数据
%p[path,txt2,raw2]=xlsread(path_file_addr) ;
%获取图的基本信息
Graph_type=graph(1,1);%//类型 1-无向图 2-有向图
Node_counts=graph(1,2);
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值