JAva実現dfs及びbfsアルゴリズム
3091 ワード
dfs(深さ優先探索アルゴリズム)は主にスタック方式で実現され,主な規則は初期頂点を選択し、可能であれば(存在する場合)、その頂点の隣接する頂点にアクセスし、マークし、スタックに入れます. 最初のステップが実行できない場合(元の頂点にはアクセスされていない隣接する頂点は存在しません)、スタックが空でない場合、スタックから頂点がポップアップされます. は、第1のステップ、第2のステップをループし、スタックが空の場合、検索プロセス全体が完了する.
bfs(広さ優先探索アルゴリズム)は主にキューによって実現され、その主なルールは:は、開始点のすべての隣接点を巡回し、マーク、エンキューする. すべての隣接点がエンキューされた後、すなわちマークされていない隣接点が存在しない場合、キューヘッダから頂点を1つ取り、現在の頂点とする.最初のステップ、2番目のステップを繰り返します. キューが空であるため、第2のステップを実行できないまで、検索は終了する.
スタックの操作クラス:
キュー操作クラス:
【dfs、bfs】具体的な実装コード:
図クラス(bfs、dfsアルゴリズムを含む)
テストクラス:
bfs(広さ優先探索アルゴリズム)は主にキューによって実現され、その主なルールは:
スタックの操作クラス:
//---------------------
class stackX{
private final int size = 20;
private int[] st;
private int top;
public stackX(){
st = new int[size];
top = -1;
}
public void push(int i){
st[++top] = i;
}
public int pop(){
return st[top--];
}
public int peek(){
return st[top];
}
public boolean isEmpty(){
return (top==-1);
}
}
キュー操作クラス:
//---------------
class Queue{
private final int size = 20;
private int[] queArray;
private int front;
private int rear;
public Queue(){
queArray = new int[size];
front = 0;
rear = -1;
}
public void insert(int i){
if(rear == size-1)
rear = -1;
queArray[++rear] = i;
}
public int remove(){
int temp = queArray[front++];
if(front==size)
front = 0;
return temp;
}
public boolean isEmpty(){
return (rear+1==front || front+size-1==rear);
}
}//end class Queue
【dfs、bfs】具体的な実装コード:
図クラス(bfs、dfsアルゴリズムを含む)
//---------------------
class Vertex{
public char label;//
public boolean wasVisited;//
public Vertex(char lab){
label = lab;
wasVisited = false;// -
}
}
class Graph{
private final int max_verts = 20;//
private Vertex vertexList[];// --Vertex
private int adjMat[][];//
private int nVerts;//vertexList[] ,
private stackX theStack;// dfs
public Graph(){
vertexList = new Vertex[max_verts];
adjMat = new int [max_verts][max_verts];
nVerts = 0;// 0
for(int j=0; j
テストクラス:
public class Main{
public static void main(String[] args){
Graph theGraph = new Graph();
theGraph.addVertex('A');
theGraph.addVertex('B');
theGraph.addVertex('C');
theGraph.addVertex('D');
theGraph.addVertex('E');
theGraph.addEdge(0, 1);
theGraph.addEdge(1, 2);
theGraph.addEdge(0, 3);
theGraph.addEdge(3, 4);
System.out.print("Visits: ");
theGraph.dfs();
System.out.println();
}//end main;
}//end class Main