可能重复:
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行代码。
有什么'好'的实施?
答案 0 :(得分:3)
您应该单独实现它们,而不是将edgeEdge列表保留在边缘内。
struct Edge
{
int start;
int end;
};
由于您使用的是C ++而且它适用于奥林匹克运动会,因此最好使用STL提供的所有内容。
因此,将边缘存储在向量中。这对于迭代Edges而不是节点的算法很有帮助。
如果需要从节点遍历到节点(BFS,DFS),最好维护邻接列表。
再次使用向量数组来实现此目的。
vector<int> adj[MAXNODE];