图的遍历DFS和BFS实现

一、原文

http://blog.csdn.net/qq_24486393/article/details/50270481

二、初始数据

import java.util.LinkedList;
import java.util.Queue;

public class Graph {

    private int number =7;
    private boolean[] flag;
    private String[] vetexs = {"A","B","C","D","E","F","G"};
    private int[][] edge = {
            { 1, 1, 1, 1, 0, 0,0},
            { 0, 1, 0, 0, 1, 1,0},
            { 0, 0, 1, 0, 1, 0,0},
            { 0, 0, 0, 1, 0, 1,0},
            { 0, 0, 0, 0, 1, 0,0},
            { 0, 0, 0, 0, 0, 1,0},
            { 0, 0, 0, 0, 0, 0,1}
    };
}

三、DFS递归遍历
每当找到一个点可到达时,就继续通过该点往下遍历

   //DFS递归
    void DFSTraverse(){
        flag = new boolean[number];
        for (int i = 0;i<number;i++)
            if (!flag[i])
                DFS(i);

    }

    void DFS(int i){
        flag[i] = true;
        System.out.print(vetexs[i] + " ");
        for (int j = 0;j < number;j++)
            if (!flag[j] && edge[i][j] == 1)
                DFS(j);
    }

四、BFS遍历

每次遍历该点所能到达的所有点并添加进队列,每次从队列中继续取点继续遍历。

    void BFS_Map(){
        flag = new boolean[number];
        Queue<Integer> queue = new LinkedList<Integer>();
        for (int i = 0;i<number;i++){
            if (!flag[i]){
                flag[i] = true;
                System.out.print(vetexs[i] + " ");
                queue.add(i);
                while (!queue.isEmpty()){
                    int k = queue.poll();
                    for (int j = 0;j < number;j++){
                        if (edge[k][j] == 1 && !flag[j]){
                            flag[j] = true;
                            System.out.print(vetexs[j] + " ");
                            queue.add(j);
                        }
                    }
                }
            }
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,161评论 25 708
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,769评论 0 33
  • 对于图的操作,最基本的就是对图的遍历了,图的遍历主要有两种思想,一种是DFS(Deepth First Searc...
    郑明明阅读 393评论 0 2
  • 本文介绍图的几种基本操作:BFS,DFS,求有向图连通分量的Tarjan算法以及拓扑排序。 图的表示 一张图是由若...
    maxkibble阅读 3,474评论 0 2
  • 多么想有那么一天我能带你去吃提拉米苏,一起品尝爱情的甘美与苦涩。 (提拉米苏意为:带我走)
    傻小肆阅读 177评论 0 0