生成网络的算法,该网络使用源,水平线,直角,T形交叉点和节点填充10x10网格?

问题描述 投票:1回答:1

只是为了好玩,我正在尝试创建一个非Flash版本的http://www.jurjans.lv/stuff/net/FreeNet.htm。这一切都非常简单,但我在精神上坚持如何生成初始网络。

我可以用正方形进行广泛的if / else逻辑检查邻近的方块,但坦率地说它似乎非常费力,我想知道是否有更多更聪明的方法。生成数学图或类似的东西,然后将其转换为网格?

我不是要求别人为我编码 - 只需指出我正确的方向!

algorithm
1个回答
2
投票

完成的电路似乎是生成树。

有一种简单的方法可以通过以下方式生成random minimum spanning trees

将随机权重从某个分布分配到无向图的边缘,然后构造图的最小生成树。

总结一下:

  1. 在每个正方形的中心构建一个顶点的图形
  2. 在每个顶点及其邻居上/下/左/右之间添加边
  3. 将随机权重(例如,从0到1的均匀实数)分配给每个边
  4. 构建minimum spanning tree,例如与Prim或Kruskal
  5. 将图形转换为图块

如果您想要禁止某些形状(例如完全连接的顶点),您可能需要额外的迭代来增加任何非法的图块中使用的边的权重,然后重新生成生成树,直到最终得到合法的图形。

© www.soinside.com 2019 - 2024. All rights reserved.