#include #include #include using namespace std; const int MAXN = 1005; const int MAXM = 2005; // 用 PII 代替结构体:first 存终点(to),second 存上一条边下标(next) typedef pair PII; PII edge[MAXM]; int head[MAXN]; // 存每个点最新连出的边的下标 int cnt = 0; // 当前边的总数 // 初始化 void init(int n) { memset(head, -1, sizeof(head)); cnt = 0; } // 加边函数(单链表头插法) void add(int u, int v) { edge[cnt].first = v; // 终点 edge[cnt].second = head[u]; // 同起点的上一条边 head[u] = cnt++; } // 遍历从 u 出发能到达的所有点 void traverse(int u) { cout << "从 " << u << " 号点出发能到的点: "; for (int i = head[u]; i != -1; i = edge[i].second) { cout << edge[i].first << " "; } cout << "\n"; } // 查询从 u 出发共有几条路(出度) int count_edges(int u) { int cnt_edges = 0; for (int i = head[u]; i != -1; i = edge[i].second) { cnt_edges++; // 每摸到一条边,计数 + 1 } return cnt_edges; } int main() { int n = 4, m = 5; init(n); // 样例数据:4个点,5条边 // 1 -> 2 // 1 -> 3 // 2 -> 4 // 3 -> 2 // 3 -> 4 add(1, 2); add(1, 3); add(2, 4); add(3, 2); add(3, 4); for (int i = 1; i <= n; i++) { traverse(i); } return 0; }