【问题标题】:Algorithm to make a simple graph planar [closed]使简单图形平面化的算法[关闭]
【发布时间】:2014-01-02 20:35:30
【问题描述】:

我想知道有一些算法可以将图变成平面图? 我在谷歌搜索我没有找到可以帮助我的东西

【问题讨论】:

  • “制作”平面到底是什么意思?
  • 我更新了我的问题看图片
  • 谷歌“图形可视化”。
  • 您正在寻找的是平面图的平面嵌入。如果您可以在没有任何边缘交叉的平面上绘制图形,则该图形是平面的。有检查平面性的算法。一旦保证它是平面的,有线性时间算法可以找到这样的图形(称为平面嵌入)。请改写您的问题,以便人们可以提供答案。 :)

标签: java algorithm graph planar-graph


【解决方案1】:

评论太长了。所以请原谅我提供一个答案。

我不清楚你的问题。图形是否是平面的,是图形本身的函数,而不是它的绘制方式。 “在图论中,平面图是可以嵌入平面中的图,也就是说,它可以在平面上绘制,使其边缘仅在端点处相交。”来自http://en.wikipedia.org/wiki/Planar_graph)。

您是否需要计算/检查图形是否是平面的?

你需要把它画成平面形式吗?

在您提供的示例中,为什么第二张图比第一张图更正确?仅仅是因为它们没有相交的边吗?

假设您需要对其他图表执行此操作,使用什么规则来确定某些表示是否比其他表示更好,您的图表如何推广到其他图表?

你为什么要这样做?重点是什么?如果是作业,问题陈述究竟是什么?如果它是真实的,也许对你真正想要做的事情的解释会有所帮助。

【讨论】:

  • 我很抱歉我知道我解释得不是很好(我的英语很糟糕但我理解答案),例如我给出的第一个例子是一个错误你可以看更新! ,我想绘制一个简单的图(使用邻接矩阵)并将其转换为平面图(边仅在端点处相交)这不是家庭作业,而是学校的完整项目,我再次为我的错误解释感到抱歉和非常感谢你的回答。
  • 请贴出项目需求。 (希望翻译成英文)。这其中的一部分是困难的。判断一个图形是否是平面的很困难。 (我认为您不能简单地使用欧拉公式,因为当您计算出面数时,您必须已经有了平面表示)。绘制时使任意图形“看起来不错”也很困难。一般问题比我预期的高中项目要困难得多。他们到底要你做什么?
  • 我不在高中,这是我必须做的:我的程序必须绘制平面图,使其边缘仅在端点处相交。通过使用随机邻接矩阵。用 java awt et swing 编码。
  • 所以他们给你一个邻接矩阵,他们保证代表一个平面图,你必须提供一个平面表示? cs.brown.edu/~rt/gdhandbook/chapters/straightline.pdf 描述了一些算法来做到这一点。或者简单地谷歌“图形的算法平面表示”。所有这些算法都比我对高中作业的预期复杂得多。没有其他项目可以替代吗?
  • 非常感谢您的回答,是的,程序将邻接矩阵转换为平面图(通过使用一些算法),不,我无法更改项目:x
【解决方案2】:

有一个适用于每个平面图的欧拉定理。

定义:平面图是可以在平面上绘制的图,因此边不会相互交叉。任何平面图都将平面划分为多个不相交的区域,称为图的面。

欧拉定理:V-E+F=2 其中:

  1. – V 是顶点数,
  2. – E 是边数,
  3. – F 是面数

但是,我无法在 java 中提供解决方案,因为它不清楚您想要实现它的方式。例如,如果要将图转换为平面图;从视觉上看,您可能需要重新排列画布和元素,这将是一种复杂的实现。一般认为算法明智,首先在伪代码中创建解决方案。

例如,由于我们有适用于每个平面图的欧拉定理,因此您需要找到一种方法将该定理应用于现有的非平面图,然后对其进行测试。

步骤:(可能其中一些需要坐标)

  • 确定什么是顶点
  • 确定边缘是什么
  • 确定面是什么
  • 找到一种计算顶点的方法
  • 想办法计算边数
  • 想办法计算人脸数
  • 重新排列画布中的所有内容
  • 测试定理,如果它适用,那么你的图形是平面的,否则,重新排列。
  • 请注意,通过使用坐标,您可以从一开始就确定图形是否可以绘制成平面图,但是,在绘制图形时,您不应允许任何线边相交。

【讨论】:

  • 谢谢你的帮助,但我不知道我将如何重新排列顶点,如果你看图你就能理解问题,是的,我必须用 java 编码算法
  • 欢迎您,如果您的程序如图所示,那么它可以正常工作,因为两个图形都是平面的。它们的外观不会影响规则,请查看以下说明:!(thecafe.me/image/1/Nicholas_uOpsc.jpg)。
  • 谢谢你的图片,我现在明白你的解释了。对于代码,我将很快更新我的问题,但我的代码制作的图形不是平面的,这是图片中的一个错误,我很抱歉
  • 我不认为你可以使用欧拉公式来确定一个图形是否是平面的,因为你可以计算面的唯一方法是首先制作一个平面表示。您需要编写 Kuratowski 定理,请参阅en.wikipedia.org/wiki/Kuratowski%27s_theorem 以确定图形是否是平面的(即问题是否完全可以解决)。天真的蛮力很容易,但效率极低。我怀疑高中作业无论如何都需要这种编码/算法知识。正如我在回答中所说,我不清楚实际问题是什么。
  • 如果您知道如何确定什么是什么并证明可以在实际绘制图形之前以平面方式绘制图形,则可以使用欧拉公式。关于解决它的幼稚方法,它应该是随机的,直到您生成可以存储的案例并在此之后直接得出结果。例如,如果您发现一个具有 4 个顶点、6 个边和 4 个面的图形可以被绘制成平面,那么您所要做的就是存储它。因为它将适用于所有具有相似特征的图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
相关资源
最近更新 更多