优先级搜索

优先级搜索:在对图进行搜索的时候,每访问一个新结点,就更新和这个结点邻接的结点的优先级,按照优先级的顺序访问结点。

void priority_first_search(int s)//s为优先级搜索生成树的根节点
{
    status(s)=VISITED;//标记s已经访问过
    while(1)
    {
         for (w=s.adj();w!=-1;w=s.nextadj())//对s的每一个邻接点,进行更改优先级;
            w.priority_update(s);
        //下面对图中所有顶点进行访问,找出未访问的优先级最大的结点,作为下一个访问的结点
         for (int t_priority=MIN,w=0;w<n;w++)
         {
              if(status(w)==UNVISITED)
                if (priority(w)>t_priprity)
                {
                 s=w;
                 t_priority=priority(w);
                } 
         }
         if(status(s)=VISITED)
         status(s)=VISITED;
    }
}

1.对于树的BFS DFS 搜索,本质上都是在搜索的过程中不断调整优先级,每一步的迭代选取优先级最高的顶点。

2.最小生成树prime算法:

优先级定义为子树外结点到已有的子树的距离,每次添加一个新结点,更新这个结点的邻接点的优先级。

3.单源点最短路径dijkstra算法:

优先级定义为子树外结点到源点的距离,每次添加一个新结点,更新这个结点的邻接点的优先级。

posted @ 2021-04-28 18:08  Macondo's  阅读(260)  评论(0)    收藏  举报