【发布时间】:2014-04-05 16:26:30
【问题描述】:
更新——我会再解释一遍
接下来我需要做的:
- 创建图表创建者
- 使用一些算法搜索从 A 顶点到 B 顶点的最短路径。
首先,我需要在网页上绘制图形。我用Graph Dracula Library(不用太在意,我的回答不是关于它,我只是说了,所以问题会满)。其次,我正在使用数组数组。
当我向页面添加 1 个顶点时,我必须将 1 行添加到数组数组中,并将 1 列添加到数组数组的每个旧行中。当我在两个顶点之间添加边时,我将不得不更新数组数组。当我删除顶点时,我必须在数组数组的每一行中删除与该顶点相连的行,并删除与该顶点相连的列。
示例:
1 页为空白,数组数组为:
[ ]
2 添加3个顶点:
页面是:
矩阵(数组的数组)是:
[
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
3 删除第二个顶点:
页面是:
矩阵是:
[
[0, 0],
[0, 0]
]
注意,页面上的顶点是1 和3,但在矩阵中只有 2 行/列未连接到页面。所以连接丢失了。现在页面上的3 顶点是矩阵中每个元素/行中的2nd 列。
4 例如,再添加 1 个顶点。
在页面中:
矩阵是:
[
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
我们在页面上有 1、3 和 4 顶点,但矩阵中只有 3 行/列。第二行/列属于页面上的3顶点,矩阵的第三行/列属于页面上的4顶点。
5 等等等等。矩阵和页面之间没有连接,所以我的程序工作不正确。
问题
我只能通过名称访问页面上的顶点。喜欢1 或3。所以我必须:
更新 dracula 的 50% 的代码(对我来说这是不可能的)
或者
使用其他方法创建和使用矩阵。我认为 assoc 矩阵将解决我的问题,但我不知道如何构建/使用 assoc 矩阵。那是我的问题。这个怎么做?或者,如果 assoc 数组不是一个好主意,请举例说明如何使用对象。
我需要这样的东西:
// adding 1, 2, 3 vertexes
deleteVertex('3'); // this will delete both `3` vertex on page and in matrix
addVertex(); // this will add 4 (!) vertex on page and 4 vertex to matrix
请帮帮我!
P.S.:您可以在 OLD QUESTION 部分查看我如何使用矩阵的示例。
老问题
我有下一个问题。我需要创建动态数组数组。我正在构建图形创建器(绘制图形的程序)。
我正在使用javascript。
我如何处理数组数组。第一次通话时vertexCount 为 0。
// 1. Upgrade old rows and add 1 new column to each
for (var i = 0; i < vertexCount; i++)
{
weightArray[i][vertexCount] = 0;
}
// 2. Add new row
weightArray[vertexCount] = [];
// 3. Fill this row with zeros
for (var i = 0; i <= vertexCount; i++)
{
weightArray[vertexCount][i] = 0;
}
一切正常。但是,我可以通过name 访问顶点。示例:我创建了 5 个顶点。名称是:1、2、3、4、5。我删除了第三个顶点。现在的名字是:1、2、4、5。我添加了1个顶点。现在的名字是:1、2、4、5、6。现在,如果我尝试删除第 4 个顶点,将删除 5 个顶点,而不是 4 个(因为第 5 个顶点的索引为 4)。如果我尝试删除第 6 个顶点,我会得到错误,因为矩阵中没有第 6 个顶点。
很遗憾,但我正在使用框架,所以我无法重写如何添加顶点。如何更改我的代码(查看'我如何使用数组代码'),以便我可以通过矩阵中的名称访问顶点?我需要 assoc 数组,但我不知道该怎么做。请帮忙。
P.S.:删除代码:
for (var i = 0; i < vertexCount; i++)
{
delete weightArray[i][target-1];
}
delete weightArray[target-1];
vertexCount = vertexCount - 1;
当我了解如何创建/填充关联数组后,我将不得不重写我删除顶点的部分
【问题讨论】:
-
你应该使用 JavaScript 对象。
-
@thefourtheye:如果他不能更改顶点类型,则不会。进一步的对象是“much”,(因为一切都是相对的),如果这是资源密集型的,则比数组慢,使用顶点和图形通常是......
-
请再看我的问题,我添加了图片和更多示例,试图更好地解释我的问题。
-
JavaScript - 重新发明轮子的最佳工具,每次你编写一个新程序...所以善待自己,搜索“图形数据结构”,并研究一些真正的编程语言有用于执行此操作的库,例如 Java、C++ 或 Python。
标签: javascript javascript arrays