图的BFS DFS

图的BFS DFS

在这里插入图片描述

/**
	 * 广度优先搜索
	 * @param begin 开始的结点名称
	 */
	public void bfs(String begin) {
		Vertex beginVertex = vertexMap.get(begin);
		if(beginVertex==null) return;
		HashSet<Vertex> set = new HashSet<>();
		Queue<Vertex> queue=new LinkedList();
		queue.offer(beginVertex);
		while(!queue.isEmpty()) {
			Vertex vertex= queue.poll();
			System.out.println(vertex.name);
			set.add(vertex);
			Edge edge=vertex.next;
			while(edge!=null) {
				if(set.contains(vertexMap.get(edge.name))) {
					edge=edge.next;
					continue;
				}
				queue.offer(vertexMap.get(edge.name));
				edge=edge.next;
			}
		}
	}
/**
	 * 深度优先搜索
	 * @param vertex 开始结点
	 * @param set 传入的一个set集合 用于去重
	 */
	public void dfs(Vertex vertex,HashSet<Vertex> set) {
		System.out.println(vertex.name);
		set.add(vertex);
		Edge edge=vertex.next;
		while(edge!=null) {
			if(set.contains(vertexMap.get(edge.name))) {
				edge=edge.next;
				continue;
			}
			dfs(vertexMap.get(edge.name),set);
			edge=edge.next;
		}
	}
	public void dfs(String name) {
		Vertex beginVertex = vertexMap.get(name);
		if(beginVertex==null) return;
		dfs(beginVertex, new HashSet<Vertex>());
	}
相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页