最佳优先遍历

 

thoughs:

算法:BestFS(G, s) 
输入:有向图G及其中的顶点s 
输出:从s出发,对G做最佳优先遍历,并对访问到的边进行分类
假设:调用之前,所有顶点的状态都已置为UNDISCOVERED,所有边的分类置为UNKNOWN 

若s已被访问(status[s] != UNDISCOVERED),则直接返回; 
令Distance(s) = 0; //最近 = 最佳
不断地 { 
 在所有尚未访问过的顶点中,找出距离已访问点集最近的顶点v; 
 调用visit(v),对v进行访问,并将其加入已访问点集(将其状态设置为status[v] = VISITED); 
 调用updateDistanceAfter(v),更新各顶点到已访问点集的最短距离; 
 } 直到所有顶点都已被访问

code:

public class BestFS {

    public BestFS(Graph gg) {
        super(g);
    }

    //最佳的优先遍历的算法


    public Object traver(Vertex s,Object info){
  // 针对的非连通图
        if(UNDISCOVERED!=S.getstatus()){
            return  null;
        s.setDistance(0);

        Vertex v;
        while (null!=(v=bestVertex())){
            visit(v,null);
            updateDistanceAfter(v);
        }
        return  null;
        }


        //定点访问操作: 在被算法中,info 无用
        protect Object visit(Vertex v,Object info){
            v.setState(VISITED);
        }

        //基于bestFS d最短的距离算法: s为期待能够hi是定点,info 想算法传递参数
        public Object algorithm(Vertex s,Obejct info{
           reset(s); //初始化
            traver(s,info);
            return null;
        }



        //从尚未访问到的定点中悬案出最佳的者
        protected Vertex bestVertex(){
            int bestvalue=Integer.MAX_VALUE;
            Vertex bestVertex=null;
            for (Iterator it=G.vertices();it.hasnext():
                 ) {
                Vertex u=(Vertex) it.getNext();
                if(UNDISCOVERED==u.getStaus()){

                    if(UNDISCOVERED==U.getStatus()){
                        bestvalue=u.getDistance();
                        bestVertex=u;
                    }
                }

            }

            if(null!=bestVertex && (null!=bestVertex.getBSParent())){

                G.edgeFromTo(bestVertex.getBFSParent(), bestVertex).setType(TREE);//被标记为
                return bestVertex;

            }
        }


    }
}

 

证明:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值