C ++图实现

时间:2011-03-31 06:56:03

标签: c++ data-structures graph

  

可能重复:
  Graph implementation C++

您好

我想知道用c ++快速编写图表的实现。我需要数据结构易于操作和使用图形算法(例如BFS,DFS,Kruskal,Dijkstra ......)。 我需要这个算法Olympiad的实现,所以更容易编写数据结构。

你能否提出这样的DS(主要结构或类别及其中的内容)。我知道邻接列表和邻接矩阵是主要的可能性,但我的意思是更详细的代码样本。

例如,上次我必须为DFS实现图表时,我想到了这个DS:

struct Edge {
  int start;
  int end;
  struct Edge* nextEdge;
}

然后使用一个大小为n的数组,在第i个位置包含表示从第i个节点开始的边的边缘列表(struct Edge)。

但是当在这个图上尝试DFS时,我不得不用大约10个while循环编写一个50行代码。

有什么'好'的实施?

1 个答案:

答案 0 :(得分:3)

您应该单独实现它们,而不是将edgeEdge列表保留在边缘内。

struct Edge
{
int start;
int end;
};

由于您使用的是C ++而且它适用于奥林匹克运动会,因此最好使用STL提供的所有内容。

因此,将边缘存储在向量中。这对于迭代Edges而不是节点的算法很有帮助。

如果需要从节点遍历到节点(BFS,DFS),最好维护邻接列表。

再次使用向量数组来实现此目的。

vector<int> adj[MAXNODE];