来个爱玩原神的佬来教教我这道题怎么来调
查看原帖
来个爱玩原神的佬来教教我这道题怎么来调
981981
little_whitezzz楼主2024/1/8 22:29
import java.io.BufferedInputStream;
import java.util.*;

public class Main {
    static int N = 100010;
    static int[] h = new int[N];
    static int[] ne = new int[N];
    static int[] e = new int[N];
    static boolean[] st = new boolean[N];
    static int idx = 0;
    static int n,m;
    static void add(int a,int b){
        e[idx] = b;
        ne[idx] = h[a];
        h[a] = idx ++;
    }
    static void dfs(int u){
        System.out.print(u + " ");
        st[u] = true;
        for(int i = h[u];i != -1;i = ne[i]){
            int j = e[i];
            // 直接对j来进行下一步的搜索
            if(!st[j])
                dfs(j);
        }
    }
    static void bfs(int u){
        Queue<Integer> queue = new LinkedList<>();
        queue.add(u);
        st[u] = true;
        while(!queue.isEmpty()){
            int a = queue.poll();
            System.out.print(a + " ");
            for(int i = h[a];i != -1;i = ne[i]){
                int j = e[i];
                if(!st[j]){
                    // 加入队列
                    queue.add(j);
                    st[j] = true;
                }
            }

        }
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        n = sc.nextInt();
        m = sc.nextInt();
        // 初始化所有的顶点
        Arrays.fill(h,-1);
        // 先来进行排序将大的数放前面将小的数放后面
        List<int[]> list = new ArrayList<>();
        while(m -- > 0){
            int a = sc.nextInt();
            int b = sc.nextInt();
            list.add(new int[]{a,b});
        }
        //直接开始dfs
        Collections.sort(list, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0] == o2[0])
                    return o2[1] - o1[1];
                return o1[0] - o2[0];
            }
        });
        // 再来添加边
        for(int i = 0;i < list.size();i ++){
            int[] tmp = list.get(i);
            int a = tmp[0];
            int b = tmp[1];
            add(a,b);
        }
        dfs(1);
        Arrays.fill(st,false);
        System.out.println();
        bfs(1);
    }
}
2024/1/8 22:29
加载中...