有向路径检查

来源:互联网 发布:比特币挖矿用什么软件 编辑:程序博客网 时间:2024/06/11 23:44

题目描述

对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。

给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。

import java.util.*;/*public class UndirectedGraphNode {    int label = 0;    UndirectedGraphNode left = null;    UndirectedGraphNode right = null;    ArrayList<UndirectedGraphNode> neighbors = new ArrayList<UndirectedGraphNode>();    public UndirectedGraphNode(int label) {        this.label = label;    }}*/public class Path {    public boolean checkPath(UndirectedGraphNode a, UndirectedGraphNode b) {        // write code here        if(a==null||b==null) return false;boolean res1 = findNode(a, b);if(res1==true) return true;boolean res2 = findNode(b, a);return res2;    }        public boolean findNode(UndirectedGraphNode a, UndirectedGraphNode b){LinkedList<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();HashSet<UndirectedGraphNode> set = new HashSet<UndirectedGraphNode>();queue.add(a);set.add(a);while(!queue.isEmpty()){UndirectedGraphNode tmp = queue.removeFirst();if(tmp==b) return true;for(UndirectedGraphNode w : tmp.neighbors){if(set.contains(w)) continue;queue.add(w);set.add(w);}}return false;}}


0 0