L4754 2023-01-01 13:24 采纳率: 50%
浏览 74

图从某个顶点出发的所有深度优先遍历序列

题目描述:求图从某个顶点出发的所有深度优先遍历序列

img

如上图表示的是从A出发的深度优先遍历的解空间树,对解空间树进行先根次序遍历,采用的是深度优先搜索策略,从根结点开始,到达树的一个叶子结点表示图的一条深度优先搜索路径,如(A,B,C,D,E};继续遍历,当搜索了图中所有顶点时,就完成了图的一次深度优先遍历,如(A,B,C,D,E,F},因此所有的深度优先序列应为:

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<n && j>=-1 && j<n && i!=j)
            for(int k=j+1;  k<n;  k++)           //当j=-1时,k从0开始寻找后继邻接顶点
                if(this.matrix.get(i,k)>0 && this.matrix.get(i,k)<MAX_WEIGHT)//权值表示有边
                    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;
        }
    }
我的运行结果

img

  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2023-01-01 13:35
    关注

    解决遇到的问题的一种方法是在递归函数中增加一个参数,用于储存当前的深度优先序列。然后在递归结束时,打印这个序列。例如可以更改代码,使用一个数组来储存当前的序列,然后在递归的末尾打印这个数组。
    仅供参考,望采纳,谢谢。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月1日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真