SCLP图论计划1 -“ 图”从Excel来

SCLP图论-“ 图”从Excel来

楔子:SCLP 是 Maple技术交互研讨 836204107 群主倡导的计划. 本博客图论部分是其计划一部分. 以问题为导向,选择性介绍, 达到触类旁通,最终能够熟练计算机辅助图论研究的方法.问题大多来源于MaplePrimes,经过适当改造. 下面的方法有的并不是最简洁的,甚至不够好,有心人可以自己优化. 有时候为了快速得到结果,方法上并没有那么考究. 在我眼里这是可以理解的.

问题1 考虑从Excel图数据导入Maple并进行分析. Excel 在两列分别存储顶点,同一行的两顶点构成一条边. 例如下表数据就可以表示 一条路 P 5 = 12345 P_5=12345

1 2
2 3
3 4
4 5

Excel 表格储存图也有它的方便之处. 比如Excel和其他软件交互很好,方便重复利用,第二个Excel 表格操作人机交互比敲代码还是要直观舒服.

我们现在有一个这样的Excel表格. 里面就存储这样的数据,下面介绍如何构造图及简要分析该图. 有2896行,下面是它的部分截图, 有关数据我放在CSDN个人资源上,可以免费下载.

在这里插入图片描述
我们将下好的表放在相应的文件夹里:比如我放在桌面是"C:Users\asus\Desktop\graphdata\ourgraph.xlsx" 然后利用 Import命令并结合 ExcelTools 工具导入到一个2892*2矩阵中.

restart:
with(GraphTheory):
kernelopts(homedir):
file := cat(%, "\\Desktop\\graphdata\\ourgraph.xlsx");
with(ExcelTools):
M := Import(file,1, "A1:B" ):
M := map(round, M);

倒数第一行做了这样一件事情M 矩阵元素从浮点型转整型. 取下整是其中一个办法. 这里可以试试不转会出什么后果.
原因是Excel表导入的数据是浮点型,而图论包里表示顶点的数字序号不能为浮点型. 是整型.
在这里插入图片描述
可以如下考察M矩阵的维数.

LinearAlgebra:-Dimensions(M); # 结果为 2896,2

下面有两个考虑,第一个考虑是这个图表示
有向图还是无向图. 下面分别表示无向图处理和有向图处理.

edges := { convert(M, listlist)[] }:
G := Graph(edges);  #无向图

edges := { convert~(convert(M, listlist), set)[] }
G := Graph(edges);  #有向图

这样这个图就创建好了. 我们使用下面命令 DrawGraph(G) 绘图,从结果看除了看出图至少有两个连通分支,基本上也看不出个啥,因为过于密集.
在这里插入图片描述

分析

1 我们想找哪两个顶点之间存在一个双向边
可以考虑将所有边进行反转,然后保留相同元素. 即保留交集元素. 当然这种方法不见得好,但思路很直接.
找到双向边的这一块值得优化. 留作思考

edges__reversed := map(u -> u[[2, 1]], edges):
TheOnlyPair := edges intersect edges__reversed;
TheOnlyPair := convert(TheOnlyPair[1], set);
op~(IncidentEdges~(G, TheOnlyPair, direction=incoming) union IncidentEdges~(G, TheOnlyPair, direction=outgoing));
G__paired := Graph(%);
HighlightVertex(G__paired, [TheOnlyPair[]], cyan):
DrawGraph(G__paired);

在这里插入图片描述
图上看346和344是双向边。
2 考察M矩阵第一个顶点的邻域是啥样:

M[1, 1];
IncidentEdges(G, M[1, 1], direction=incoming);
IncidentEdges(G, M[1, 1], direction=outgoing);  # all edges come to 16, no one goes out from 16
DrawGraph(Graph(%% union %))

在这里插入图片描述
图上说明Excel表第一个顶点标号是16, 只有出邻点,没有入邻点.
需要说明地是: Maple2019 尚不支持重边和环边. Maple2020开始支持环边. 使用时候需要小心细节.

回顾 :我们处理了一类导入Excel 图数据的问题. 为后续分析图提供了基础.

原创文章 16 获赞 8 访问量 1217

猜你喜欢

转载自blog.csdn.net/zlc_abc/article/details/105226845