算法笔记-图--bfs
题目:PAT A1076
思路:
- 建立图;
- 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; }
- dfs便利的的深度不超过给定深度,但是采用BFS 把节点编号和层号建立结构点,控制