-
代码实现
//图节点 public class MapNode { public String val; public List<MapNode> neighbor;//记录周围的点 public int index; public MapNode(String val, int index) { this.val = val; this.index = index; neighbor = new ArrayList<>(); } }
public static boolean wideSearch(MapNode start, int target ){ List<MapNode> nodes = new ArrayList<>(); nodes.add(start); return wideSearch(nodes,target,new HashSet<>()); } public static boolean wideSearch(List<MapNode> nodes, int target, Set<MapNode> point){ if ( nodes == null || nodes.isEmpty()) return false; List<MapNode> childes = new ArrayList<>(); for(MapNode node : nodes){//先找到当前层的所有点,逐一判断, if(node.index == target) return true; point.add(node); for(MapNode temp : node.neighbor){//如果没有则将每个点的周围的点添加进去 if(!point.contains(temp)){//点周围的点不能是已经查找过的点 childes.add(temp); } } } return wideSearch(childes,target,point); }
测试:
public class Main { public static void main(String[] args) { MapNode n1 = new MapNode("1",1); MapNode n2 = new MapNode("2",2); MapNode n3 = new MapNode("3",3); MapNode n4 = new MapNode("4",4); MapNode n5 = new MapNode("5",5); MapNode n6 = new MapNode("6",6); MapNode n7 = new MapNode("7",7); MapNode n8 = new MapNode("8",8); MapNode n9 = new MapNode("9",9); n1.neighbor.add(n2); n2.neighbor.add(n1); n1.neighbor.add(n3); n3.neighbor.add(n1); n1.neighbor.add(n4); n4.neighbor.add(n1); n2.neighbor.add(n5); n5.neighbor.add(n2); n1.neighbor.add(n6); n6.neighbor.add(n1); n2.neighbor.add(n6); n6.neighbor.add(n2); n3.neighbor.add(n7); n7.neighbor.add(n3); n4.neighbor.add(n8); n8.neighbor.add(n4); n5.neighbor.add(n9); n9.neighbor.add(n5); n6.neighbor.add(n9); n9.neighbor.add(n6); System.out.println(wideSearch(n1,9));//true System.out.println(wideSearch(n1,13));//false } }
图的广度优先搜索
最新推荐文章于 2024-03-21 09:40:13 发布