ABCDEF
ABCEDF
ABECDF
ABEDCF
ACBEDF
ACDEBF
ACEBDF
ADCBEF
ADCEBF
ADEBCF
ADECBF
//返回顶点vi在vj后的后继邻接顶点序号 ;若j=-1,返回vi的第一个邻接顶点序号;若不存在后继邻接顶点,返回-1。用于7.3节图的遍历算法
protected int next(int i, int j)
{
int n=this.vertexCount();
if(i>=0 && i=-1 && jfor(int k=j+1; k//当j=-1时,k从0开始寻找后继邻接顶点
if(this.matrix.get(i,k)>0 && this.matrix.get(i,k)//权值表示有边
return k;
return -1;
}
public boolean isover(int i,boolean []visited)
{
for (int j = 0; j < this.vertexCount(); j++) {
if (j == i) continue;
if (this.matrix.get(i, j) != MAX_WEIGHT && !visited[j])//只要存在一个与他相邻的结点不为空,就把temp标记为true
{
return false;
}
}
return true;
}
public void printPathAll(int i)
{
boolean[] visited = new boolean[matrix.columns];//false 表示该结点未被访问
String stack="";
fun(i,visited,stack);
}
public void fun(int i,boolean visited[],String stack) {
if(!visited[i])//如果该点未被访问,则访问它,并且递归访问他的下一条边
{
stack+=this.get(i);
visited[i]=true;
for(int j=next(i,-1); j!=-1; j=next(i,j)){
{
if(!visited[j])
fun(j,visited,stack);
}
}
if (isover(i,visited))
{
System.out.println(stack);
}
visited[i]=false;
}
}
解决遇到的问题的一种方法是在递归函数中增加一个参数,用于储存当前的深度优先序列。然后在递归结束时,打印这个序列。例如可以更改代码,使用一个数组来储存当前的序列,然后在递归的末尾打印这个数组。
仅供参考,望采纳,谢谢。