我需要生成一个具有固定数量顶点的随机图。我每次都难以获得解决方案。
图表规则
- 每个顶点的随机数最多为N-1,其中N是顶点的总数。
- 顶点不能包含与自己的直接连接
- 顶点不能包含与其他顶点的重复连接。
- 如果顶点A连接到顶点B,则顶点B必须连接到顶点A.
- 每个顶点必须连接至少3个其他顶点。所以每个顶点都有[3,N-1]个边。
醇>
我在大约70%的时间内得到了正确的解决方案,但有时我在图中相当远,然后没有留下有效的顶点。我需要对顶点连接有什么约束来保证解决方案?
到目前为止我做了什么
- 随机化[3,N-1]之间每个顶点的多个连接。
- 检查连接总数是否均匀。如果A指向B,B指向A,那么图中的连接总数应该是偶数,否则就没有解决方案。如果是奇数修改顶点,那么总数是偶数。
- 填写完全约束的每个顶点。因此,具有N-1个连接的顶点必须指向所有其他顶点。填写从该顶点到所有其他顶点的连接,并为所有其他顶点提供与完全约束顶点的连接。
- 按照约束的程度处理每个顶点。因此,通过生成的随机顶点索引处理所有具有N-2个连接的顶点,N-3连接,然后是N-4等。
- 如果新的随机索引有效,则连接它们然后继续,如果无效则重新随机索引,直到获得有效值。 (图表最多只有7-15个节点,所以这不会花费很长时间)。
醇>
一般来说,我到达最后2个顶点,但是这个方法没有剩下有效值。每个都需要1个连接,但它们已经相互连接。任何人都有一个更好的算法或对连接数量的额外约束,这将有助于我?
如果存在偶数个边缘,应该有很多解决方案,但我上面的算法显然不能保证找到一个。