使用json对象的邻接列表

时间:2011-08-26 09:11:22

标签: javascript json data-structures adjacency-list

我想使用json对象创建一个邻接列表。我想以下列格式为邻接列表实现json对象。

var JSONobj= {node1:[{x1,y1},{x3,y3},{x4,y4}], node2:[{x2,y2},{x3,y3}], node3:[]}

我的疑问是,我是否可以动态地为坐标列表添加值,例如JSONobj.node3[0]={x4,y4}? 或者有没有更好的方法从对象声明外部向JSONobj添加值?

3 个答案:

答案 0 :(得分:1)

您可以将元素推送到JSON对象,因为它只是一个漂亮的数组。

JSONobj.push({"newElement":"value"});

答案 1 :(得分:0)

JSON in Javascript是一个普通的(结构化的)Javascript对象。所以,首先它必须遵守对象语法。 node1x1等必须定义变量或显式常量。 JS中未定义{x1, x2}。它必须是attribute: value,例如{x1: 1, "x2": "a2"}。只要你有一个语法上有效的对象,你就可以随意操作它。 E.g。

var node1 = "node1";
var x1 = "x1";
var y1 = "y1";
var x3 = "x3";
var y3 = "y3";
var JSONobj= {node1: [{x1:1,y1:1}, {x3:2,y3:3}], 
    "node2": [{"x2":1,"y2":2}], "node3": []};
JSONobj.node3[0] = {"x4":4,"y4":4};   
JSONobj.node4 = [];
JSONobj.node4.push({"x5":5, "x6":6});

如果要在JS外部使用此对象(例如将其发送到服务器),则需要将其转换为JSON字符串:

var JSONtext = JSON.stringify(JSONobj);

如果要将JSON字符串转换为JS中的JSON对象,请使用:

var JSONobj = JSON.parse(JSONtext);

答案 2 :(得分:0)

当我使用JSON实现邻接列表时遇到了一些问题。首先,我不能在id:value对中使用'整数值'作为id。所以我重新考虑我的问题并以另一种方式接近,我实现了如下的邻接列表(作为列表列表)。

当前解决方案

通过其笛卡尔坐标表示图的每个节点实际上是一个低级表示。在算法级别,我们需要将单个唯一数字与每个顶点相关联;例如,您可以映射:

  • vertex 0 ---> (100,200)
  • vertex 1 ---> (45,78)
  • vertex 2 ---> (198,213)

我列出了所有顶点的列表: 例如:nodes = [[100,200],[45,78],[198,213]]

其中nodes[1]给出顶点1的坐标。

邻接列表是列表列表的形式。

adj_list = [[1,2,3], [0, 4, 5] ]

adj_list[1]为您提供与node1相邻的节点列表。等等..

这意味着:邻近(直接连接到)顶点0,你有顶点1,2,3。

与顶点1相邻,您有顶点0,4,5 ......

我发现这个解决方案更适合我的问题。感谢Dave和Jiri的回复。