尝试使用链接列表和向量来建立邻接列表

时间:2013-05-10 01:12:15

标签: c++ adjacency-list

我正在试图找出如何制作邻接列表,但我无法理解我需要做什么。我有这个Java代码:

public class Graph
{
 private final int V;
 private Bag<Integer>[] adj;
 public Graph(int V)
{
 this.V = V;
 adj = (Bag<Integer>[]) new Bag[V];
 for (int v = 0; v < V; v++)
 adj[v] = new Bag<Integer>();
 }
 public void addEdge(int v, int w)
 {
 adj[v].add(w);
 adj[w].add(v);
 }

但我正在尝试理解它并将其转换为c ++。我不确定的主要部分是

adj = (Bag<Integer>[]) new Bag[V];
 for (int v = 0; v < V; v++)
 adj[v] = new Bag<Integer>();

有人可以帮忙将此转移到c ++吗?

1 个答案:

答案 0 :(得分:3)

爪哇:

adj = (Bag<Integer>[]) new Bag[V];
 for (int v = 0; v < V; v++)
 adj[v] = new Bag<Integer>();

C ++:

vector<vector<int>> adj;
for(int v=0;v<V;v++) adj.push_back(vector<int>());

爪哇:

 public void addEdge(int v, int w)
 {
 adj[v].add(w);
 adj[w].add(v);
 }

C ++:

public void addEdge(int v, int w)
{
    adj[v].push_back(w);
    adj[w].push_back(v);
}

还有一件事:BigInteger可以存储比int大得多的数字。但是没有必要使用BigInteger。因为addEdge中的w和v必须小于V(V是int),否则它将溢出数组的范围。