洛谷 P5318. 查找文献
原题链接
简单
作者:
一声消防员
,
2025-04-14 20:25:28
· 山东
,
所有人可见
,
阅读 4
邻接表写法与算法基础课y总教的写法有所区别,这样子写更方便排序
import java.util.*;
public class Main {
static int N = 100010;
static int n,m;
static boolean[] st = new boolean[N];
static List<Integer>[] l = new ArrayList[N];
static int[] path = new int[N];
static int idx1;
static int idx2;
public static void dfs(int u) {
path[idx1 ++] = u;
st[u] = true;
for (int i:l[u]) {
if (!st[i]) {
dfs(i);
st[i] = false;
}
}
}
public static void bfs(int u) {
Queue<Integer> q = new LinkedList<>();
q.offer(u);
st[u] = false;
while (q.size() != 0) {
int t = q.remove();
path[idx2 ++] = t;
for (int i:l[t]) {
if (!st[i]) {
q.offer(i);
st[i] = true;
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for (int i = 1;i <= n;i ++) l[i] = new ArrayList<>();
for (int i = 1;i <= m;i ++) {
int a = sc.nextInt();
int b = sc.nextInt();
l[a].add(b);
}
for (int i = 1;i <= n;i ++) Collections.sort(l[i]);
dfs(1);
for (int i = 0;i < n;i ++) System.out.print(path[i] + " ");
System.out.println();
Arrays.fill(st, false);
bfs(1);
for (int i = 0;i < n;i ++) System.out.print(path[i] + " ");
}
}