#include<bits/stdc++.h>
using namespace std;
const int N = 105;
int ne[N << 1], e[1 << N], h[N], idx;
/*
h[a]; // 存放一个a点连接的边的编号
e[idx]; // 抽象为表示idx当前边,但结果存放的是b点的编号
ne[idx]; // 表示当前编号为idx的边的后面一条边
*/
// 注意:h[a]中索引存放的是(a->b)a点的编号
// e[idx]的结果存放的是(a->b)中b点的编号,表示新建一个结点
// 其他的所有位置均表示边的编号
void add(int a, int b) {
// a是父节点,b是子结点
e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
int main()
{
memset(h, -1, sizeof h);
for(int i = 0;i < N;i ++) {
cin >> a >> b; // 假设b是a的父节点(有向图)
add(b, a); // b -> a
// 如果是无向图,则再加一句add(a,b)
}
for(int i = h[x]; ~i; i = ne[i]) {
int j = e[i]; // i表示的是边的编号,j=e[i]表示的是该边连接的点编号 // 表示x的某个子结点,遍历全部子结点
}
return 0;
}
邻接表的存储
于 2022-01-13 11:13:13 首次发布