指针表示法
struct ArcNode
{
int adjvex;
ArcNode* next;
};
struct VertexNode
{
int vertex;
ArcNode* firstedge;
};
void add(int from,int to)
{
s = new ArcNode;
s->adjvex = to;
s->next = adjlist[i].firstedge;
adjlist[from].firstedge = s;
}
vector表示法
vector<int> v[MAXN];
void add(int x,int y)
{
v[x].push_back(y);
}
数组表示法
int head[MAXN];
int h = 0;
struct Edge
{
int to;
int next;
};
Edge e[MAXN<<1];
void add(int x,int y)
{
e[h].to = y;
e[h].next = head[x];
head[x] = h++;
}
三种方法的简单比较
- 指针结构清晰,占用空间小,但是指针操作容易出错。
- vector简单明了,但仅限于顶点编号为1~N的情况,而且储存的信息量少,此外,如果数据量比较大,vector的操作会比较费时间。
- 数组表示法,实际上是模拟指针来实现的,既摆脱了令人头晕的指针,又有占用空间小、速度快的优势,强烈推荐!