static String b[] = { "a", "b", "c", "d", "e", "f", "g" };
static int [][]arr= {
{0,0,1,1,0,1,0},
{0,0,1,0,0,0,0},
{1,1,0,1,0,0,0},
{1,0,1,0,0,0,0},
{0,0,0,0,0,0,1},
{1,0,0,0,0,0,1},
{0,0,0,0,1,1,0}
};
对此二维数组进行深度搜索,并遍历结果。
深搜结果
a c b d f g e
代码:
package Shen.dome1;
public class dfs<Dfs> {
// 构造图的边
private int[][] edges = {
{0, 0, 1, 1, 0, 1, 0},
{0, 0, 1, 0, 0, 0, 0},
{1, 1, 0, 1, 0, 0, 0},
{1, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 1},
{0, 0, 0, 0, 1, 1, 0}
};
// 构造图的顶点
private String[] vertexs = {"a", "b", "c", "d", "e", "f", "g"};
//记录被访问顶点
private boolean[] verStatus;
//顶点个数
private int vertexsNume = vertexs.length;
public void DFSTra() {
verStatus = new boolean[vertexsNume];
for (int i = 0; i < vertexsNume; i++) {
if (verStatus[i] == false) {
DFS(i);
}
}
}
//递归深搜
private void DFS(int i) {
System.out.print(vertexs[i] + " ");
verStatus[i] = true;
// j==2
for (int j = firstAdjVex(i); j >= 0; j = nextAdjvex(i, j)) {
if (!verStatus[j]) {//是否判断过
System.out.println(i);
System.out.println(j);
DFS(j);
}
}
}
// 返回与i相连的第一个顶点
private int firstAdjVex(int i) {
for (int j = 0; j < vertexsNume; j++) {
if (edges[i][j] > 0) {
return j;
}
}
return -1;
}
// 返回与i相连的下一个顶点
//右走去找下一个
private int nextAdjvex(int i, int k) {
for (int j = (k + 1); j < vertexsNume; j++) {//下一行
if (edges[i][j] == 1) {
return j;
}
}
return -1;
}
// 测试
public static void main(String[] args) {
new dfs().DFSTra();
}
}