1. 程式人生 > >dfs 遞迴的方法

dfs 遞迴的方法

  public void explore(int v) {
        	visited[v]=true;  //結點v已經被遍歷了
        	for(int i=0;i<verticesnumber;i++) {    
        		if(arcs[v][i]==1 && (visited[i]==false)) {   //如果下一個結點和上一個結點有連線的話(連線為1,不連線為0),那麼arcs[v][i]==1,並且這個結點還未遍歷的話,就再進行一次遍歷,這裡指的是一條樹走下來,只遍歷了一條,只是圖中的冰山一角
        			explore(i);
        		}
        	}
        }
        public void dfs() {         //這裡就是dfs的方法,不過是要根據上面的explore來做的,畢竟要從小到大
        	for(int i=0;i< verticesnumber;i++) {    
        		visited[i]=false;         //遍歷一圈,先進行初始化,都是未遍歷的狀態,也可以刪掉
        		
        	}
        	for(int j=0;j< verticesnumber;j++) {
        		if(visited[j]==false) {     //遍歷所有的頂點,如果結點處於未遍歷的狀態,那就按章explore的方法來進行遍歷
        			explore(j);
        		}
        	}
        }

這裡的verticesnumber都是圖Graph中的結點個數,因為要遍歷的是整個圖的結點