图遍历基本就是广度优先和深度优先,基本思想和树遍历一致。需要注意的一点就是图的连通性,有时从图中一点出发并不能到达所有节点。
import java.util.*;
public class Graph {
private static int [][] graph;
private static int size;
static int[] isVisited = new int[10];
public static void main(String[] args) {
graph = new int[][]{
{0, 0, 1, 1, 0, 0},
{0, 0, 1, 0, 0, 0},
{1, 1, 0, 0, 0, 0},
{0, 0, 1, 0, 1, 0},
{0, 0, 0, 1, 0, 1},
{0, 0, 0, 0, 1, 0}
};
size = graph.length;
BFS();
}
static void BFS(int[][] graph, int idx){
Queue<Integer> queue = new LinkedList<>();
System.out.println(idx);
queue.offer(idx);
isVisited[idx] = 1;
while(!queue.isEmpty()){
int u = queue.poll();
for(int i =0;i<graph[idx].length;i++){
if(i!=u&&graph[u][i]==1&&isVisited[i]==0){
isVisited[i] = 1;
System.out.println(i);
queue.offer(i);
}
}
}
}
static void DFS(int[][] graph, int idx){
isVisited[idx] = 1;
System.out.println(idx);
for(int i =0;i<graph[idx].length;i++){
if(isVisited[i]==0&&i!=idx&&graph[idx][i]==1){
DFS(graph, i);
}
}
}
public static void BFS(){
for(int i=0;i<size;i++){
if(isVisited[i]==0){
BFS(graph, i);
}
}
}
public static void DFS(){
for(int i =0;i<size;i++){
if(isVisited[i]==0){
DFS(graph, i);
}
}
}
}