圖的遍歷 bfs pat1076

#include <iostream>
//1076,bfs
#include<map>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
const int maxv = 1e3 +5;
struct node{
       int id,layer;
};
vector<node> Adj[maxv];
int n, k;
int vis[maxv]={0};

int bfs(int v, int k){
       int ans = 0;
       queue<node> q;
       node start;
       start.id = v;
       start.layer = 0;
       vis[start.id] =1;
       q.push(start);
       while(!q.empty()){
              node top = q.front();
              q.pop();
              int u = top.id;
              for(int i =0; i < Adj[u].size();i++){
                     node next  = Adj[u][i];
                     next.layer = top.layer +1;
                     if(vis[next.id] ==0 && next.layer<=k){
                            q.push(next);
                            vis[next.id] = 1;
                            ans++;
                     }
              }
       }

       return ans;
}


int main()
{
       freopen("1076.txt","r",stdin);
       cin>>n>>k;
       node user;
       for(int i =1;i<=n;i++){//節點編號從1開始
              user.id =i;
              int m,a;
              cin>>m;
              for(int j =0;j<m;j++){
                     cin>>a;
                     Adj[a].push_back(user);
              }
       }

       int query , s;
       cin>>query;
       for(int i = 0; i < query;i++){
              memset(vis,0,sizeof(vis));//數組初始化
              cin>>s;
              int ans = bfs(s,k);
              printf("%d\n",ans);
       }



    //cout << "Hello world!" << endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章