有向图路径存在判断



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) {
   	return check(a,b,new HashSet<UndirectedGraphNode>()) || check(b,a,new HashSet<UndirectedGraphNode>());
    
    }
    public boolean check(UndirectedGraphNode from,UndirectedGraphNode to,HashSet<UndirectedGraphNode> visit){
    	if(from==to)
    		return true;
    	if(visit.contains(from))
    		return false;
    	
       ArrayList<UndirectedGraphNode> neighbors = from.neighbors;
       for(UndirectedGraphNode n:neighbors)
       {   if(check(n,to,visit))
    	      return true;         
       }
       visit.add(from);
       return false;
    	
    }
    
}

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

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

猜你喜欢

转载自blog.csdn.net/lucyxu107/article/details/77513222
今日推荐