如何在十二面体图中编码邻接列表?

时间:2017-05-12 06:33:48

标签: graph adjacency-list

它有:

20个顶点 30条边 ∈{20,30}

如何为每个顶点1,2,... 20生成邻接列表? V1与2和3链接 v2与1和4相关联 v3与1和5 ??

相关联

是否有公式?这是一个游戏项目,不知道我是否错过了数学课或其他什么?我应该学习什么来理解解决方案?

2 个答案:

答案 0 :(得分:1)

手工构建:

int adjs[] = { 1, 4, 7, 0, 2, 9, 1, 3, 11, 2, 4, 13, 0, 3, 5, 4, 6, 14, 5, 7, 16, 0, 6, 8, 7, 9, 17, 1, 8, 10, 9, 11, 18, 2, 10, 12, 11, 13, 19, 3, 12, 14, 5, 13, 15, 14, 16, 19, 6, 15, 17, 8, 16, 18, 10, 17, 19, 12, 15, 18 };

for (int i = 0, int j = 0; i < 20; i++, j = i * 3) {
    caves[i] = Cave(i);
    for (int c = j; c < j + 3; c++) {
        caves[i].adjsListy.addAdj(adjs[c]);
    }

我在解决方案中找到了帮助:https://rosettacode.org/wiki/Hunt_The_Wumpus/C%2B%2B

答案 1 :(得分:0)

我认为链接列表通常是手动构建的。 但是,您可以查看https://en.wikipedia.org/wiki/Dodecahedron中2:1 pyritohedron的特殊情况,以了解如何从立方体到十二面体。 (另请参阅第34节中的动画gif;笛卡儿坐标&#34;)

这告诉我们的是,十二面体可以通过插入平分每个立方体12边缘的新顶点来构造。然后插入连接这些新顶点的新边,使它们在交替的方向上将立方体的6个面的每个面平分。

我认为这种理解可能有助于构建算法,或者只是帮助您构建手动链接列表。

这当然只关注顶点链接,以找到每个顶点的坐标,参见例如How to generate/calculate vertices of dodecahedron?