思想:找到一个节点,看是否被访问过,如果访问过,然后循环遍历它的邻接节点,否则就标记一下,被访问过【朝着一个节点深度挖掘!】
如下图:第一张为图,第2张为输出结果,其中0,1,2,3,4表示节点号
下面为代码:
public class DeepFS {
public static void deepTravel(int[][]a,int[] color,int k){
color[k]=1;//对遍历过的节点标记一下
/***
* 先找这个点K与之邻接的点,遍历第K行
*/
for (int i=0;i<a[k].length;i++){
if(a[k][i]==1 && color[i]==0){ //遍历第k行的所有元素,a[k][i]表示第i个与k连接的点
deepTravel(a,color,i); //连接数组值设置为1,且没被遍历过,继续递归
}
}
}
public static void main(String[] args) {
//邻接表
int a[][]={
{0,1,1,1,0},
{1,0,1,1,1},
{1,1,0,0,0},
{1,1,0,0,0},
{0,1,0,0,0}
};
int []color = new int[a.length];//记录遍历过的节点
deepTravel(a,color,0); //k代表节点
}