Java最短路径问题

时间:2018-11-26 20:19:10

标签: java shortest-path

我正在尝试解决最短路径问题。 IT是一个古老的滑铁卢CCC问题,我正在为2019年练习。从本质上讲,这是一本“选择冒险家的书”,每页有N页(最多10000页),可以通往Ni页。第一个输入是N,然后有N行输入,其中第一个数字是到其他页面的分支数,然后是分支到的其他页面。如果为0,则为终点,并且没有其他分支。我们必须说明是否到达所有页面以及最短路径。样本输入和输出:

input:
3
2 2 3
0
1 1
output
Y
2

我能够解决问题,但我仍未通过时限测试。如何使我的代码更有效地通过时间测试?这是我用来避免循环并获得最短路径的递归方法。

   public static void shortestPath(Page p, ArrayList<Page> list){
        ArrayList<Page> currentList = new ArrayList<>();
        for(Page pg : list){
            currentList.add(pg);
        }
        p.visited = true;
        if(p.paths.get(0) == 0){
            currentList.add(p);
            Paths temp = new Paths();
            temp.aPath = currentList;
            completedPaths.add(temp);
        }else{
            for(int i=0;i<p.paths.size();i++){
                if(!currentList.contains(pages.get(p.paths.get(i) - 1))){
                    if(!currentList.contains(p)){
                        currentList.add(p);
                    }
                    shortestPath(pages.get(p.paths.get(i) - 1), currentList);
                }
            }
        }
   }

0 个答案:

没有答案