###### 图的深度、广度优先搜索（JAVA实现）

import java.util.*;
public class DFS {

/**
* @param args
*/
final static int MAXN = 100;
static Scanner scan = new Scanner(System.in);
public static class Stack    {
int Depth;
int Dot;
Stack()    {
Depth = -1;
Dot = -1;
}
public int getTopDot()    {
return Dot;
}
public int getDepth()    {
return Depth;
}
public void PushDate(int dep,int dot)    {
Depth = dep;
Dot = dot;
System.out.println(dot+" The depth is:"+dep);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] Graph = new int[MAXN][MAXN];
boolean[] vis = new boolean[MAXN];
for(int i=0;i<MAXN;i++)    {
Arrays.fill(Graph[i], 0);
}
Arrays.fill(vis, false);
int base = 0;int top = 0;
Stack[] stack = new Stack[MAXN];
int n,m;//n为点数，m为边数
n = scan.nextInt();
m = scan.nextInt();
for(int i=0;i<2*n;i++)    {
stack[i]=new Stack();
}
for(int i=0;i<m;i++)    {
int a,b;
a = scan.nextInt();
b = scan.nextInt();
Graph[a][b] = Graph[b][a] = 1;
}
for(int i=0;i<n;i++)    {
if(vis[i] == false)    {
int dep = -1;
int dot = -1;
stack[top].PushDate(1, i);
top++;
vis[i] = true;
while(base != top)    {
dot = stack[top-1].getTopDot();
for(int j=0;j<n;j++)    {
if(Graph[dot][j] == 1 && vis[j] == false)    {
dep = stack[top-1].getDepth()+1;
stack[top].PushDate(dep, j);
top++;
vis[j] = true;
break;
}
if(j == n-1)//如果无路可走，出栈
top--;
}

}
}
}
}
}

import java.util.*;
public class BFS {
/**
* @param args
*/
final static int MAXN = 100;
static Scanner scan = new Scanner(System.in);
public static class Queue    {
public int Depth;
public int Dot;
Queue()    {
Depth = -1;
Dot = -1;
}
public void enterQueue(int dot,int dep)    {
Dot = dot;
Depth = dep;
System.out.println(Dot+" "+"The Depth is:"+ Depth);
}
public int depDate()    {
return Depth;
}
public int dotdate()    {
return Dot;
}
};
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] Graph = new int[MAXN][MAXN];
boolean[] vis = new boolean[MAXN];
for(int i=0;i<MAXN;i++)    {
Arrays.fill(Graph[i], 0);
}
Arrays.fill(vis, false);
int base = 0;int top = 0;
Queue[] queue = new Queue[MAXN];
int n,m;//n为点数，m为边数
n = scan.nextInt();
m = scan.nextInt();
for(int i=0;i<2*n;i++)    {
queue[i]=new Queue();
}
for(int i=0;i<m;i++)    {
int a,b;
a = scan.nextInt();
b = scan.nextInt();
Graph[a][b] = Graph[b][a] = 1;
}
for(int i=0;i<n;i++)    {
if(vis[i] == false)    {
int dot = 0;int dep=0;
queue[top].enterQueue(i, 1);
top++;
vis[i] = true;
while(top != base)    {
dep=queue[base].depDate()+1;
dot=queue[base].dotdate();
for(int j=0;j<n;j++)    {
if(Graph[dot][j] == 1 && vis[j] == false)    {
queue[top].enterQueue(j, dep);
top++;
vis[j] = true;
}
}
base++;
}
}
}
}
}

#### java学习笔记之图的遍历（广度优先搜索BFS）

2014-12-28 16:11:00

#### 利用广度优先遍历(BFS)计算最短路径 - Java实现

2015-03-15 02:46:54

#### 【数据结构】Java实现图的DFS和BFS

2015-12-12 00:43:22

#### 基于图的深度优先搜索和广度优先搜索java实现

2013-12-06 16:49:06

#### bfs（JAVA）

2016-05-16 12:03:29

#### Java图以及BFS广度优先遍历

2015-02-18 10:23:52

#### BFS求解迷宫问题初探（java版）

2014-01-24 14:30:21

#### 经典图算法Java代码实践：BFS,DFS以及几种最短路径算法

2014-06-11 19:50:46

#### java 实现DFS和BFS

2017-03-09 16:39:47

#### JAVA BFS 广度搜索

2017-04-06 13:08:40