邻接表
#include <stdio.h>
#include <string.h>
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define Max_n 100005
#define Max_e 10005
struct Vertex
{
int head; //head记录某点的的信息,即从E中的哪个下标开始
}V[Max_n];
struct Edge
{
int v,w; //v表示连接点的编号,w表示此边的权值
int next; //next负责连接和此点相关的边
}E[Max_e];
int top; //top记录已用E的个数,且保证每个E独立
void Init()
{
top = 0;
CLR(V,-1);
}
void Add_edge(int u,int v,int w) //演示如何添加边
{
E[top].v = v;
E[top].w = w;
E[top].next = V[u].head; //链表的头插法
V[u].head = top++; //链表的头指针改为此边编号
}
void dfs(int x) //演示如何遍历
{
for(int i = V[x].head; i != -1;i = E[i].next)//i为边在E中的编号
{
int v = E[i].v;
int w = E[i].w;
}
}