PATA1076题解

xiaoxiao2021-02-28  33

图的BFS遍历

// // main.cpp // PATA1076 // // Created by Phoenix on 2018/2/18. // Copyright © 2018年 Phoenix. All rights reserved. // #include <iostream> #include <cstdio> #include <vector> #include <queue> using namespace std; const int maxn = 1010; const int inf = 1000000000; int n, l; int G[maxn][maxn]; void BFS(int s) { bool vis[maxn] = {false}; queue<int> q; int lastnode = s, newlastnode = -1, level = 0, num = 0; q.push(s); vis[s] = true; while(!q.empty()) { int top = q.front(); //printf("%d ", top); num++; q.pop(); for(int i = 1; i <= n; i++) { if(G[top][i] == 1 && vis[i] == false) { vis[i] = true; newlastnode = i; q.push(i); } } if(top == lastnode) { lastnode = newlastnode; level++; } if(level > l){ printf("%d\n", num - 1); break; } } if(level <= l) printf("%d\n", num - 1); } int main(int argc, const char * argv[]) { fill(G[0], G[0] + maxn * maxn, 0); scanf("%d %d", &n, &l); for(int i = 1; i <= n; i++) { int k, a; scanf("%d", &k); for(int j = 0; j < k; j++) { scanf("%d", &a); G[a][i] = 1; } } int k; scanf("%d", &k); for(int i = 0; i < k; i++) { int a; scanf("%d", &a); BFS(a); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-2621695.html

最新回复(0)