深搜:使用递归(类似于树的先根序遍历)
package Lesson1;
public class MyDeep {
public static void deepTravel(int[][] a, int[] color, int k) {
System.out.println(k);
color[k] = 1;// 标记为已访问
for (int i = 0; i < a[k].length; i++) {
if (a[k][i] == 1 && color[i] == 0) {// 与k邻接并且未被访问
deepTravel(a, color, i);
}
}
}
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];// 访问标记数组;0为未访问,1为已访问
deepTravel(a, color, 0);// 从0号节点开始深搜
}
}
package Lesson1;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class MyWidth {
public static void main(String[] args) {
int[][] a = { { 0, 1, 1, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 1, 1 }, { 0, 1, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 1, 0, 1, 1 }, { 0, 0, 1, 0, 1, 0, 0 },
{ 0, 1, 1, 0, 1, 0, 0 } };// 邻接矩阵
// 广搜
List lst = new ArrayList();// 待遍历节点
Set st = new HashSet();// 已遍历节点集合
lst.add(0);// 加入一个初始节点
while (true) {
if (lst.isEmpty()) {// 链表空
break;
}
int node = (Integer) lst.get(0);// 取头节点
System.out.println(node);
st.add(node);// 加入已遍历节点集合
lst.remove(0);// 删除头节点
for (int i = 0; i < a[node].length; i++) {
if (a[node][i] == 1 && st.contains(i) == false
&& lst.indexOf(i) < 0) {// 邻接节点&&未被访问&&lst中未加入该节点
lst.add(i);
}
}
}
}
}