深度优先搜索(栈实现)框架流程:

实例:
- import java.util.Stack;
- public class DfsStack{
- private int M= 8;//图有八个顶点,如下所示
- //图及图的邻接矩阵表示
- //1------5
- //| |
- //2--4---6----8
- //| |
- //3------7
- private int matrix[][] ={
- {0, 1, 0, 0, 1, 0, 0, 0},
- {1, 0, 1, 1, 0, 0, 0, 0},
- {0, 1, 0, 0, 0, 0, 1, 0},
- {0, 1, 0, 0, 1, 1, 0, 0},
- {1, 0, 0, 1, 0, 0, 0, 0},
- {0, 0, 0, 1, 0, 0, 1, 1},
- {0, 0, 1, 0, 0, 1, 0, 0},
- {0, 0, 0, 0, 0, 1, 0, 0}
- };
- //访问标记, visited[i]=true表示顶点i已访问
- private boolean visited[];
- public DfsStack(){
- visited=new boolean[M+1];
- }
- private void GT_DFS(){
- visited[1] = true;//从顶点1开始访问
- Stack< Integer> s=new Stack< Integer>();
- System.out.print("1 ");
- s.push(1);
- while(!s.empty()){
- int top = s.peek();
- int i=0;
- for(i = 1; i <= M; ++i){
- if(!visited[i] && matrix[top - 1][i - 1 ] == 1)
- {
- visited[i] = true;
- s.push(i);
- System.out.print(i+" ");
- break;
- }
- }
- if( i == M + 1){
- s.pop();
- }
- }
- }
- public static void main(String args[]){
- new DfsStack().GT_DFS();
- }
- }
复制代码 运行:
D:java>java DfsStack
1 2 3 7 6 4 5 8
源码下载:http://file.javaxxz.com/2014/12/5/001025812.zip |