• 图的递归dfs和队列bfs


     1 package cn.itcast.graph;
     2 
     3 import java.util.LinkedList;
     4 import java.util.Queue;
     5 
     6 public class DFS {
     7     public static void dfsByRecursive(int[][] graph) {
     8         int length = graph.length;
     9         boolean[] visited = new boolean[length];
    10         //如果是连通图
    11         //从0号节点开始dfs遍历
    12         dfs(graph, 0, visited);
    13         //如果是非连通图
    14         //需要用一个for循环,确保每一个节点都能被访问到
    15 //        for (int i = 0; i < length; i++) {
    16 //            dfs(graph,i,visited)
    17 //        }
    18     }
    19 
    20     public static void dfs(int[][] graph, int vertex, boolean[] visited) {
    21         visited[vertex] = true;
    22         System.out.print(vertex + " ");
    23         int length = graph.length;
    24         for (int i = 0; i < length; i++) {
    25             if (!visited[i] && graph[vertex][i] == 1) {
    26                 dfs(graph, i, visited);
    27             }
    28         }
    29     }
    30 
    31     public static void bfsByQueue(int[][] graph) {
    32         Queue<Integer> queue = new LinkedList<Integer>();
    33         int length = graph.length;
    34         boolean[] visited = new boolean[length];
    35 
    36         for (int i = 0; i < length; i++) {
    37             if (!visited[i]) {
    38                 visited[i] = true;
    39                 System.out.print(i + " ");
    40                 queue.add(i);
    41                 while (queue.size() != 0) {
    42                     Integer temp = queue.poll();
    43                     for (int j = 0; j < length; j++) {
    44                         if (!visited[j] && graph[temp][j] == 1) {
    45                             visited[j] = true;
    46                             System.out.print(j + " ");
    47                             queue.add(j);
    48                         }
    49                     }
    50                 }
    51             }
    52         }
    53     }
    54 
    55     public static void main(String[] args) {
    56         //定义一个图:使用邻接矩阵
    57         int[][] graph = {{0, 1, 0, 0, 1, 0, 0, 0},
    58                 {0, 0, 1, 1, 0, 0, 0, 0},
    59                 {0, 0, 0, 1, 0, 0, 0, 0},
    60                 {0, 0, 0, 0, 0, 0, 0, 0},
    61                 {0, 0, 0, 0, 0, 1, 0, 1},
    62                 {0, 0, 0, 0, 0, 0, 1, 0},
    63                 {0, 0, 0, 0, 0, 0, 0, 0},
    64                 {0, 0, 0, 0, 0, 0, 0, 0}};
    65         
    66 //        int[][] graph = {
    67 //                { 0, 1, 1, 0, 0 },
    68 //                { 0, 0, 1, 0, 1 },
    69 //                { 0, 0, 0, 0, 0 },
    70 //                { 1, 1, 0, 0, 1 },
    71 //                { 0, 0, 1, 0, 0 }
    72 //        };
    73 
    74         dfsByRecursive(graph);
    75         System.out.println();
    76         bfsByQueue(graph);
    77     }
    78 }
  • 相关阅读:
    分段控制器UISegmentedControl的使用、同一个控制器中实现多个View的切换、addChildViewController等方法的使用
    警示框UIAlertController的使用(看完马上会用!!)
    断言NSAssert的使用
    概念篇(一)
    《iOS开发进阶》书籍目录
    《编写高质量iOS与OS X代码的52个有效方法》书籍目录
    《精通Objective-C》书籍目录
    《iOS设计模式解析》书籍目录
    《精通iOS开发》书籍目录
    常用的代码块
  • 原文地址:https://www.cnblogs.com/huangmengyu/p/14155892.html
Copyright © 2020-2023  润新知