Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
Java 一种简单平面图的生成算法_Java_Algorithm_Graph_Planar Graph - Fatal编程技术网

Java 一种简单平面图的生成算法

Java 一种简单平面图的生成算法,java,algorithm,graph,planar-graph,Java,Algorithm,Graph,Planar Graph,我想知道有什么算法可以把一个图变成平面图? 我在谷歌上搜索了一下,没有找到什么可以帮助我的 有一个适用于每个平面图的欧勒定理 定义:平面图是可以在平面上绘制的图形,这样边就不会相互交叉。任何平面图都将平面划分为许多不相交的区域,称为图的面 欧拉定理:V-E+F=2 其中: –V是顶点数 –E是边的数量 –F是面数 然而,我不能用java提供解决方案,因为它不清楚您想要实现它的方式。例如,如果要将图形转换为平面图形;在视觉上,您可能需要重新排列画布和元素,这将有点复杂。一般来说,从算法角度考虑,首

我想知道有什么算法可以把一个图变成平面图? 我在谷歌上搜索了一下,没有找到什么可以帮助我的
有一个适用于每个平面图的欧勒定理

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

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

  • –V是顶点数
  • –E是边的数量
  • –F是面数
  • 然而,我不能用java提供解决方案,因为它不清楚您想要实现它的方式。例如,如果要将图形转换为平面图形;在视觉上,您可能需要重新排列画布和元素,这将有点复杂。一般来说,从算法角度考虑,首先用伪代码创建解决方案

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

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

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

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

        你的问题我不清楚。图形是否平面是图形本身的函数,而不是它的绘制方式。“在图论中,平面图是一种可以嵌入平面的图,也就是说,它可以在平面上绘制,使其边只在端点相交。”摘自)

        你需要计算/检查图表是否为平面图吗

        你需要画平面图吗

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

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


        你为什么这么做?重点是什么?如果是家庭作业,问题陈述是什么?如果是现实生活,也许解释一下你真正想做的事情会有所帮助。

        你说的“使”它平面化到底是什么意思?我更新了我的问题“图形可视化”图片日志。你要找的是平面图的平面嵌入。如果可以在平面上绘制图形而不需要任何边交叉,则图形是平面的。有检查平面度的方法。一旦保证它是平面的,就有线性时间算法来找到这样的图形(称为平面嵌入)。请改写你的问题,以便人们能给出答案。:)谢谢你的帮助,但我不知道我将如何重新排列顶点,如果你看图片,你可以理解问题,是的,我必须用Java编写算法。欢迎你,如果你的程序如图片所示,那么它工作正常,因为两个图都是平面的。它们看起来的样子并不影响规则,请检查以下解释:!谢谢你的照片我现在明白了你在解释。对于代码,我将很快更新我的问题,但是我的代码生成的图形不是平面的,这是图片中的一个错误,我很抱歉,我不认为你可以使用Euler公式来确定图形是否是平面的,因为唯一可以计算面的方法是首先生成平面表示。你需要对Kuratowski的定理进行编码,看看图是否是平面的(即问题是否可以解决)。天真的暴力很容易,但效率却极低。我怀疑高中作业是否需要这种编码/算法知识。正如我在回答中所说,我不清楚实际的问题是什么。如果你知道如何确定什么是什么,并且在你实际绘制之前证明一个图形可以以平面的方式绘制,你可以使用欧拉公式。关于解决这个问题的简单方法,它应该是随机的,直到您生成可以存储的案例,然后直接得出结果。例如,如果您发现一个具有4个顶点、6条边和4个面的图形是如何绘制成平面的,那么您所要做的就是存储它。因为它将适用于所有具有相似特征的图表。很抱歉,我知道我解释得不太好(我的英语很差,但我理解答案),因为我给出的第一个示例是一个错误,您可以查看更新,我想画一个简单的图形(使用邻接矩阵)并将其转换为平面图(边只在端点相交)。这不是一个家庭作业,而是学校的一个完整项目。再次,我很抱歉我的解释不好,非常感谢你的回答。请发布项目的要求。(希望翻译成英语)。这其中的一部分是困难的。计算出一个图是否是平面图是困难的。(我不认为你可以简单地使用欧拉公式,因为当你计算出面数时,你必须已经有了一个平面表示)。绘制任意图形时,使其“看起来漂亮”也很难。一般的问题比我预期的高中项目要难得多。他们到底要你做什么?我不是高中生这是我必须做的:我的程序必须以边缘相交的方式绘制平面图