zoukankan      html  css  js  c++  java
  • PAT:1076. Forwards on Weibo (30) AC

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<vector>
    using namespace std;
    const int MAX=1010;
    
    bool tag[MAX];    //标记BFS是是否被访问过
    
    struct node
    {
      int ID;      //编号
      int layer;    //层号
    };
    
    vector<node> Adj[MAX];  //邻接表,每个位置都是一个node
    queue<node> q;      //BFS待查询队列
    
    int BFS(int s,int l)    //起始点s,极限传播层数l
    {
      int transNum=0;      //转发次数
      node start;
      start.ID=s;
      start.layer=0;
      q.push(start);
      tag[s]=1;
      while(!q.empty())
      {
        node tmp=q.front();
        q.pop();
        int u=tmp.ID;
        for(int i=0 ; i<Adj[u].size() ; ++i)    //处理此编号的邻接节点
        {
          node next=Adj[u][i];          //【skill】可以直接用二维数组
          next.layer=tmp.layer+1;
          if(tag[next.ID]==0 && next.layer<=l)  //未被访问而且在传播范围之内
          {
            ++transNum;
            tag[next.ID]=1;            //符合的才进的来,在这里改标记
            q.push(next);
          }
        }
      }
      return transNum;
    }
    
    int main()
    {
      int n,lev;
      node user;
      scanf("%d%d",&n,&lev);
      for(int i=1 ; i<=n ; ++i)        //建立邻接表
      {
        user.ID=i;
        int followNum;
        scanf("%d",&followNum);
        for(int j=0 ; j<followNum ; ++j)
        {
          int f;
          scanf("%d",&f);
          Adj[f].push_back(user);      //【caution】看清题意:f号可以转发给编号为i的用户user
        }
      }
      int k;
      scanf("%d",&k);
      for(int t=0 ; t<k ; ++t)
      {
        int query;
        scanf("%d",&query);
        memset(tag,0,sizeof(tag));
        printf("%d
    ",BFS(query,lev));
      }
      return 0;
    }
  • 相关阅读:
    基于策略模式简单实现element表单校验
    跨域
    原型模式
    单例模式
    vue-router进阶篇
    vue-router
    h5深度剖析
    js同步异步,任务队列
    JavaScript中事件委托(事件代理)详解
    网络请求get和post的区别
  • 原文地址:https://www.cnblogs.com/Evence/p/4319662.html
Copyright © 2011-2022 走看看