Hi,I am beginner and I want to know what is the fastest way to implementing graphs in C++ for some algorithms of graph(DFS,BFS,.....). Sorry for my poor english.
Hi,I am beginner and I want to know what is the fastest way to implementing graphs in C++ for some algorithms of graph(DFS,BFS,.....). Sorry for my poor english.
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | Kevin114514 | 3611 |
| 4 | jiangly | 3583 |
| 5 | strapple | 3515 |
| 6 | tourist | 3470 |
| 7 | Radewoosh | 3415 |
| 8 | Um_nik | 3376 |
| 9 | maroonrk | 3361 |
| 10 | XVIII | 3345 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 162 |
| 2 | adamant | 148 |
| 3 | Um_nik | 146 |
| 4 | Dominater069 | 143 |
| 5 | errorgorn | 141 |
| 6 | cry | 138 |
| 7 | Proof_by_QED | 136 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 10 | soullless | 133 |
| Name |
|---|



I can help you that, using lists!
Thing is you'll get the edges like "there's an edge from node x to node y of cost z". For each edge i, you'll "put" it your graph:
cost[i]=z;
node[i]=y;
next[i]=last[x];
last[x]=i;
At any time, last[x] will remember which is the last edge that goes from node x to another node. When you want to see the neighbors of a node, watch this:
p=last[x];
while(p!=0){
//node[p] is my neighbor
//the cost of the edge between me and node[p] is cost[p]
p=next[p];
}
This works really fast, and it's quite easy after you get it. So you'll need next[EDGES], node[EDGES] and, if the problem specifies, cost[EDGES]. Of course last[NODES]. Remember that in a undirected graph you'll need 2 edges for each step: one that goes form x to y, and one that goes from y to x, and you'll have double number of edges. Got it?
thanks
Use adjacency list representation. U can use vector to easily maintain your adjacency list. For example lest's assume a graph with n nodes and m edges, the edges are given in the form (a b) where there is a directed edge from a to b. U can do the following
traversing the adjacency list of any node is easy;
For sparse graphs you can use static arrays to index the edges:
For me, the easiest and shortest way is to use a vector and range for loops from C++11.
Declaration of adjacency list:
Add directed edge u->v:
Process edges of node v:
Of course, if edges also have a weight/capacity associated with them, you'd declare a
pair<int,int>vector instead.I hope I've been of help.
I think for adjacency linklist :
for weighted graph :
vector<pair<int,int> > Graph[number_of_vertex];for unweighted graph :
vector Graph[number_of_vertex];for adjacency matrix :
for weighted and unweighted : use 2D array
int Graph[number_of_vertex][number_of_vertex];