您的位置:首页 > 其它

DFS&BFS板子

2017-08-24 16:22 253 查看
十一、深度优先搜索

void dfs(int x)  \\以图的深度优先遍历为例。

    { 

      cout<<x<<‘ ‘; \\访问x顶点

      visited[x]=1; \\作已访问的标记

      for(int k=1;k<=n;k++) \\对与顶点x相邻而又没访问过的结点k进行深度优先搜索。

        if((a[x][k]==1)&&(visited[k]==0))

         dfs(k);

    }

十二、广度优先搜索

void  bfs(void) //按广度优先非递归遍历图G,n个顶点,编号为1..n。注:图不一定是连通的

{//使用辅助队列Q和访问标记数组visited。

    for(v=1;v<=n;v++)  visited[v]=0;//标记数组初始化

    for(v=1; v<=n; v++)

      if(visited[v]==0 ) {        //v尚未访问

         int h=1,r=1;    //置空的辅助队列q

         visited[v]=1;//顶点v,作访问标记

         cout<<v<<‘ ‘; //访问顶点v

         q[r]=v;    //v入队列

         while(h<=r) //当队列非空时循环

 {

             int tmp=q[h];  //队头元素出队,并赋值给tmp

             for(int j=1;j<=n;j++)

               if((visited[j]==0)&&(a[tmp][j]==1))

{//j为tmp的尚未访问的邻接顶点

                    visited[j]=1;  对j作访问标记

                    cout<<j<<‘ ‘; 访问j

                    r++; //队尾指针加1

q[r]=j; //j入队

}  //end-if

             h++;

           }//end -while

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: