Если вы смотрите на глубину первого обхода, то следующие изменения кода, которые вы должны сделать
1) Сначала объявите массив вашего узла как int[] node = {0, 1, 2, 3, 4, 5, 6}
.Это должно быть сделано, чтобы избежать начала индекса массива (0) и начального номера вашего узла (1).Итак, теперь мы предполагаем, что новые имена вашего узла 1 - 0, узла 2 - 1 ......, а узла 7 - 6.
2) Вместо выполнения
for (i = 1; i < node.length-1; i++){
depthFirst(firstNode, node[i]);
}
в myGraphs do: deepFirst (firstNode, 7);
3) В deepFirst вместо for ( i=1;i<=n;i++)
использовать for ( i=0;i<n;i++)
При выполнении System.out.println в функции deepFirst добавить единицу к числу, так как 0 представляет узел1, 1 представляет узел 2 и т. Д.
Ниже приведен ваш полностью функциональный код, который я изменил:
import java.util.Stack;
public class DFS {
Stack<Integer> st;
int vFirst;
int[][] adjMatrix;
int[] isVisited = new int[7];
/**
* @param args
*/
public static void main(String[] args) {
int[][] adjMatrix = { {0, 1, 1, 0, 0, 0, 0},
{1, 0, 0, 1, 1, 1, 0},
{1, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0 ,0},
{0, 0, 1, 1, 1, 0, 0} };
new DFS(adjMatrix);
}
public DFS(int[][] Matrix) {
this.adjMatrix = Matrix;
st = new Stack<Integer>();
int i;
int[] node = {0, 1, 2, 3, 4, 5, 6};
int firstNode = node[0];
depthFirst(firstNode, 7);
}
public void depthFirst(int vFirst,int n)
{
int v,i;
st.push(vFirst);
while(!st.isEmpty())
{
v = st.pop();
if(isVisited[v]==0)
{
System.out.print("\n"+(v+1));
isVisited[v]=1;
}
for ( i=0;i<n;i++)
{
if((adjMatrix[v][i] == 1) && (isVisited[i] == 0))
{
st.push(v);
isVisited[i]=1;
System.out.print(" " + (i+1));
v = i;
}
}
}
}}