BFS 与 DFS

        深搜和广搜是图论里面非常核心的一部分内容,用它可以解决很多的问题 。
        广度优先搜索可以对一棵树进行层次遍历,也可以用来求迷宫里面两个点之间的
最短的一条路径。下面是实现对一棵树的层次遍历:
void BFS(int n)
{
       queue<int> T;
       for(int i=1;i<=n;++i) visit[i] = false;
       for(int i=1;i<=n;++i)
       {
               if(!visit[i])
               {
                       visit[i] = true;
                       T.push(i);
                       while(!T.empty())
                       {
                               int cur = T.front();
                               Visit(cur);
                               T.pop();
                               Node *link = Edg[cur];
                               while(link)
                               {
                                       if(!visit[link->to])
                                       {
                                                visit[link->to] = true;
                                                T.push(link->to);
                                       }
                                       link = link->next;
                               }
                       }
               }
       }
}   

而对于深度优先搜索的操作则是这样的
void dfs(int u)
{
          Visit(u);
          visit[u] = true;
          Node *link = Edg[u];
          while(link)
          {
                if(!visit[link->to])
                {
                       dfs(link->to);
                 }
                 link = link->next;
          }
}
void solve(n)
{
          memset(visit,false,sizeof(visit));
          for(int i=1;i<=n;++i)
          {
                  if(!visit[i])
                  {
                         dfs(i);
                  }
          }
}
用这种深搜的方法可以判断从一个顶点出发能够到达哪些地方,经常在一些对羿的题中可以用到它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值