Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Graphviz绘制小平面图_Graphviz_Planar Graph - Fatal编程技术网

用Graphviz绘制小平面图

用Graphviz绘制小平面图,graphviz,planar-graph,Graphviz,Planar Graph,我用Graphviz画了一个图,但在一个地方有两条边的交点。我继续读下去,因为这是一个NP难问题,所以并不是所有的平面图都可以无交点绘制。我还读到,Graphviz中甚至没有实现复杂的算法来实现这一点。但是,这个交叉点尽可能容易修复,所以可能有一种方法可以消除它 以下是我使用的选项: overlap = false; splines = curved; nodesep = 0.5; 下面是图表: 那么,有没有一种方法可以修复一个交点(25-38和7-18),而不必像我那样改变边的顺序?是不是

我用Graphviz画了一个图,但在一个地方有两条边的交点。我继续读下去,因为这是一个NP难问题,所以并不是所有的平面图都可以无交点绘制。我还读到,Graphviz中甚至没有实现复杂的算法来实现这一点。但是,这个交叉点尽可能容易修复,所以可能有一种方法可以消除它

以下是我使用的选项:

overlap = false;
splines = curved;
nodesep = 0.5;
下面是图表:


那么,有没有一种方法可以修复一个交点(25-38和7-18),而不必像我那样改变边的顺序?是不是至少有一种类似于
O(n^2)
的算法可以交换两个顶点并检查交点是否消失?

这是一种热修复:

在节点7和25之间添加一条不可见边,即
7--25[style=“invi”]。此子句可以添加到图形定义的末尾,因此它不应干扰任何自动生成

这感觉像是作弊,但是,至少图定义文件中有效负载边的顺序保持不变

不幸的是,我无法解释为什么会这样。特别是,在与冲突边关联的其他节点之间添加边不会产生所需的结果


Graphviz版本:2.38.0(20140413.2041)

O(N)
算法]来测试平面性,它们通过创建平面嵌入来实现。总是可以创建一个没有边交叉的平面图的嵌入(因为这是平面图的定义),这不是一个NP难问题,如果有答案表明它们是错误的。也就是说,我从未使用过GraphVis,因此无法在该程序中帮助您解决它。@MT0我知道有快速的平面图检查。我的意思是画平面图是NPH。但我错了。我检查了一下,实际上画一个边交叉最少的图是NPH。我的错。绘制具有最小边交叉的非平面图很难-绘制没有边交叉的平面图是一个在线性时间内解决的问题(
O(N)
)-请参阅我之前评论中的第一个链接,了解许多方法中的一种。