边的定义
typedef struct Edge {
struct Edge *next;
int to;
int w;
} Edge;
掌管邻点集合的 adj
Edge *adj[n];
掌管边的 edge 数组
Edge edge[m];
加边 addEdge
void addEdge(Edge *adj[], Edge edge[], int a, int b, int w, int *edgeid) {
int id;
id = *edgeid;
edge[id].to = b;
edge[id].w = w;
edge[id].next = adj[a];
adj[a] = &(edge[id]);
(*edgeid)++;
}
初始化 adj 和边集合
void initEdge(Edge *adj[], Edge edge[], int n, int m) {
int i;
for (i = 0; i <= n; i++)
adj[i] = NULL;
for (i = 0; i <= m; i++)
edge[i].to = 0,
edge[i].w = 0,
edge[i].next = NULL;
}
邻接表模板
typedef struct Edge {
struct Edge *next;
int to;
int w;
} Edge;
void addEdge(Edge *adj[], Edge edge[], int a, int b, int w, int *edgeid) {
int id;
id = *edgeid;
edge[id].to = b;
edge[id].w = w;
edge[id].next = adj[a];
adj[a] = &(edge[id]);
(*edgeid)++;
}
void initEdge(Edge *adj[], Edge edge[], int n, int m) {
int i;
for (i = 0; i <= n; i++)
adj[i] = NULL;
for (i = 0; i <= m; i++)
edge[i].to = 0,
edge[i].w = 0,
edge[i].next = NULL;
}
开全局变量或者局部(注意不要太大)
#define N 105
#define M 205
Edge *adj[N];
Edge edge[M];
Edge *pp;
遍历点 a 的邻点
int to, w;
Edge *pp;
for (pp = adj[a]; pp != NULL; pp = pp->next) {
to = pp->to, w = pp->w;
printf("点 %d 到点 %d 的距离为 %d\n", a, to, w);
}