首页 > 其他分享 >单源最短路径问题

单源最短路径问题

时间:2023-10-09 12:13:24浏览次数:40  
标签:map deque int 路径 单源 问题 nextInt static new

单源最短路径问题

无向图【可以转化为BFS扩散问题】

首先先构造邻接表
特殊情况如下:

# 由于是无向图:我们最后要从 2 出发开始扩散
如果不考虑2次的话,就得不到下面的邻接表了,因为是无向图,那么 5 2 也是 2 5,所以我们利用 hashSet来进行操作
5 5
2 1
2 3
2 4
5 2
5 3
2

import java.util.Scanner;
import java.util.*;


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
   static Map<Integer, Set<Integer>> map = new HashMap<>();   //  邻接表
    static Deque<Integer> deque = new ArrayDeque<>();
    static boolean[] isVisited;
    static int res = 0;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int count = in.nextInt();   //  点个数
        isVisited = new boolean[count + 1];
        int row = in.nextInt();
        for (int i = 0; i < row; i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            Set<Integer> orDefault1 = map.getOrDefault(a, new HashSet<>());
            orDefault1.add(b);
            Set<Integer> orDefault2 = map.getOrDefault(b, new HashSet<>());
            orDefault2.add(a);
            map.put(a, orDefault1);
            map.put(b, orDefault2);
        }
        int start = in.nextInt();
        deque.offer(start); //  将 2 压入队列
        isVisited[start] = true;
        bfs();
        System.out.println((res - 1) * 2);  //  经过多少天可以辐射全部!!!【减去初始的那天!!!】
    }
  public static void bfs(){
        while (!deque.isEmpty()){
            int len = deque.size();
            while (len > 0){
                Integer peek = deque.pop();
                if (map.containsKey(peek)){
                    Set<Integer> set = map.get(peek);
                    for (Integer integer : set) {
                        if (!isVisited[integer]){
                            deque.offer(integer);
                            isVisited[integer] = true;
                        }
                    }
                }
                len--;
            }
            res++;
        }
    }
}

有向图【Dijistra】

标签:map,deque,int,路径,单源,问题,nextInt,static,new
From: https://www.cnblogs.com/aclq/p/17751410.html

相关文章