查找从图形上的任何节点到特定节点的单个路径

时间:2016-05-25 01:19:25

标签: java

关于这个问题的更多背景知识。

A的第1行,转到B.来自A的第2行转到C. 来自B的第1行到达A.来自B的第2行转到C. 来自C的第1行转到B.来自C的第2行转到A.

假设您在A,B或C站之一丢失。独立于 你在哪里,如果你走第2行,然后是第1行,你总是站在车站 B.拥有一条将每个人带到同一个地方的路径称为会议路径。 我们有兴趣找到一个由一组固定的会议路径组成的会议路径 指令,如'走第1行,然后第2行',等等。你可能会这样做 多次访问车站。也可能不存在这样的路径。

我正在考虑在图表上使用深度优先搜索来查找每个节点。但是因为你可以重复节点我不知道什么时候应该停止搜索并说没有路径。

是否有更好的方法在循环定向图中查找路径而不是DFS?

一旦我有一个给定的测试路径,这是我当前的实现。

public static int calculate(int[][] n, List<Integer> list){
    boolean flag = false;
    int list_counter = 0;
    mapEven.clear();
    mapOdd.clear();
    for(int i = 0; i<n.length;i++){
        int item = list.get(0);
        mapOdd.put(i, 1);

    }
    for(int x = 0; x < list.size() && !flag;x++){
        for(int i = 0; i < n.length ; i++){
            int station = path(n,i,list.get(x));
            if (station == -1){
                continue;
            }
            int old_station_amount;
            if(x%2==1){
                old_station_amount = mapEven.getOrDefault(i,0);
                mapOdd.put(station, old_station_amount+mapOdd.getOrDefault(station,0));
            }else{
                 old_station_amount = mapOdd.getOrDefault(i,0);
                mapEven.put(station, old_station_amount+mapEven.getOrDefault(station,0));
            }
        }
        if(x%2==1){
            mapEven.clear();
        }else{
            mapOdd.clear();
        }
        if(mapEven.values().contains((Integer) n.length) ||mapOdd.values().contains((Integer) n.length)){
            return -1;
        }
    }
    if(mapEven.values().contains((Integer) n.length) ||mapOdd.values().contains((Integer) n.length)){
        return -1;
    }else{
        return -3;
    }
}

0 个答案:

没有答案