吝啬的国度

来源:互联网 发布:js中怎么使用map 编辑:程序博客网 时间:2024/06/07 14:58

题目:在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。
思路:根据题目来的例子画出的是树,但是为了保险起见还是用图的方式来存储。然后是求S点与T点之间的路径,采用深度优先搜索。其中的问题就是一开始全用linkedlist来创建,提交上去(南阳oj)就发现报出编译错误,然后换成List Arraylist又能通过了,这里不是很明白。

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Country {    static List<Integer>[] list;//用来存储图的顶点    static boolean[] vist;//用来标志顶点是否被访问过    static int[] arr;//用来存储上一个城市的编号    public static void main(String[] args) {        Scanner in=new Scanner(System.in);        int m=in.nextInt();        while (m>0) {            int n=in.nextInt();            int s=in.nextInt()-1;            arr=new int[n];            arr[s]=-1;            vist=new boolean[n];            //利用邻接表创建图            list=new ArrayList[n];            for (int i = 0; i < list.length; i++) {                list[i]=new ArrayList<>();            }            for (int i = 0; i < n-1; i++) {                int a=in.nextInt()-1;                int b=in.nextInt()-1;                list[a].add(b);                list[b].add(a);            }            //深度优先搜索            DFS(s);            //输出            for (int i = 0; i < arr.length; i++) {                System.out.print(arr[i]+" ");            }            System.out.println();            m--;        }        // TODO Auto-generated method stub    }    //深度优先搜索    public static void DFS(int s){        vist[s]=true;        for (Integer i:list[s]) {            if (vist[i]) {                continue;            }            arr[i]=s+1;            DFS(i);        }    }}
原创粉丝点击