• 找出两个点之间的所有路径(原创)


      题目:给出一张图,找出图中从起始点到目的地的所有路径?找出最近的路径

      这个题目要实现:

          1、无向连通图中两点间的所有路径。

          2、路径中不能包含环路或重复的点。

          3、找出最近的一条路径。

      采用的是DFS,解题思路与迷宫问题,12345所有组合类似。

                        

    之前想的用邻接表作为数据结构,但是邻接表需要两个类,比较麻烦,所以修改了一下,每个顶点里面包含编号和与它相连的顶点链表。

        static class Vexnode
        {
            int index;
            List<Vexnode> list;
        }
        public static void findPath(Vexnode curNode,Vexnode endNode,boolean visited[],Stack<Integer> stack)
        {
            if(curNode==null || visited[curNode.index]==true)   //假如当前点已经访问过,就返回
                return;
            stack.push(curNode.index);//当前点入栈
            visited[curNode.index]=true;//当前点已经访问
            if(curNode.index==endNode.index)//如果当前点是目标点,输出
            {
                System.out.println(getMessage(stack));
                visited[curNode.index]=false;
                stack.pop();
                return;
            }
            List<Vexnode> list=curNode.list;//当前点链表
            for(int i=0;i<list.size();i++)//对相连的每个顶点进行搜索
            {
                findPath(list.get(i), endNode, visited, stack);
            }
            visited[curNode.index]=false;//搜索完毕后弹出,标志清除
            stack.pop();
        }
        
        private static String getMessage(Stack<Integer> stack)
        {
            Iterator<Integer> iterator=stack.iterator();
            String messageString="";
            while(iterator.hasNext())
            {
                messageString+=iterator.next()+"->";
            }
            if(stack.size()==0)
                return messageString;
            return messageString.substring(0,messageString.length()-2);
        }

    测试用例:

        public static void main(String[] args) {
            Vexnode v1=new Vexnode();
            v1.index=1;
            Vexnode v2=new Vexnode();
            v2.index=2;
            Vexnode v3=new Vexnode();
            v3.index=3;
            Vexnode v4=new Vexnode();
            v4.index=4;
            Vexnode v5=new Vexnode();
            v5.index=5;
            Vexnode v6=new Vexnode();
            v6.index=6;
            Vexnode v7=new Vexnode();
            v7.index=7;
            Vexnode v8=new Vexnode();
            v8.index=8;
            Vexnode v9=new Vexnode();
            v9.index=9;
            
            List<Vexnode> l1=new ArrayList<Main.Vexnode>();
            List<Vexnode> l2=new ArrayList<Main.Vexnode>();
            List<Vexnode> l3=new ArrayList<Main.Vexnode>();
            List<Vexnode> l4=new ArrayList<Main.Vexnode>();
            List<Vexnode> l5=new ArrayList<Main.Vexnode>();
            List<Vexnode> l6=new ArrayList<Main.Vexnode>();
            List<Vexnode> l7=new ArrayList<Main.Vexnode>();
            List<Vexnode> l8=new ArrayList<Main.Vexnode>();
            List<Vexnode> l9=new ArrayList<Main.Vexnode>();
            
            l1.add(v2);
            l1.add(v4);
            v1.list=l1;
            
            l2.add(v1);
            l2.add(v3);
            l2.add(v5);
            v2.list=l2;
            
            l3.add(v2);
            l3.add(v6);
            v3.list=l3;
            
            l4.add(v1);
            l4.add(v7);
            v4.list=l4;
            
            l5.add(v2);
            l5.add(v6);
            l5.add(v8);
            v5.list=l5;
            
            l6.add(v3);
            l6.add(v5);
            l6.add(v9);
            v6.list=l6;
            
            l7.add(v4);
            l7.add(v8);
            v7.list=l7;
            
            l8.add(v5);
            l8.add(v7);
            l8.add(v9);
            v8.list=l8;
            
            l9.add(v6);
            l9.add(v8);
            v9.list=l9;
            
            boolean[] visited=new boolean[10];
            Stack<Integer> stack=new Stack<Integer>();
            findPath(v1, v9, visited, stack);
        }

    输出:

    1->2->3->6->5->8->9
    1->2->3->6->9
    1->2->5->6->9
    1->2->5->8->9
    1->4->7->8->5->2->3->6->9
    1->4->7->8->5->6->9
    1->4->7->8->9

     最短路径算法  参考:

     dijkstra算法

     dijkstra算法 JAVA实现

     dijkstra算法

  • 相关阅读:
    loadrunner下检查点乱码情况处理
    Linux下安装loadrunner步骤及遇到的问题
    当你决定不再在乎的时候,生活就好起来了
    受难语录
    LoadRunner--内存指标介绍
    Microsoft Visual Studio Web 创作组件安装失败的解决方法
    (六)微服务分布式云架构spring cloud
    (五)微服务分布式云架构
    (四)微服务分布式云架构
    (三)微服务分布式云架构
  • 原文地址:https://www.cnblogs.com/maydow/p/4839376.html
Copyright © 2020-2023  润新知