算法笔记-图--bfs

题目:PAT A1076  

思路:

  1. 建立图;
    1. dfs便利的的深度不超过给定深度,但是采用BFS 把节点编号和层号建立结构点,控制 
      #include <iostream>
      #include <string>
      #include <queue>
      #include <vector>
      #include <algorithm>
      
      using namespace std;
      
      struct node {
          int id;
          int lay;
      };
      
      const int maxn = 100;
      vector<node> adj[maxn];
      bool inq[maxn] = { false };
      
      
      int bfs(int s, int l)
      {
          int num=0;
          node start;
          start.id = s;
          start.lay = 0;
          queue<node> nodes;
          nodes.push(start);
          while (!nodes.empty())
          {
              node tem = nodes.front();
              nodes.pop();
              int cur = tem.id;
              for (int i = 0; i < adj[cur].size(); ++i)
              {
                  node next = adj[cur][i];
                  next.lay = tem.lay + 1;
                  if (inq[next.id] == false && next.lay <= l)
                  {
                      num++;
                      nodes.push(next);
                      inq[next.id] = true;
                  }
              }
          }
          return num;
      }
      
      int main()
      {
          node user;
          int w, l;
          cin >> w >> l;
          for (int i = 1; i <= w; ++i)
          {
              user.id = i;
              int numfolw;
              cin >> numfolw;
              for (int j = 0; i < numfolw; ++j)
              {
                  int idfolw;
                  cin >> idfolw;
                  adj[idfolw].push_back(user);
              }
          }
          int check;
          cin >> check;
          for (int i = 0; i < check; ++i)
          {
              fill(inq, inq + maxn, false);
      
              int tem;
              cin >> tem;
              int res=bfs(tem, l);
              cout << res << endl;
          }
      
          system("pause");
          return 0;
      }

       

posted @ 2017-05-18 15:42  babyking1  阅读(158)  评论(0编辑  收藏  举报