一起来打王者荣耀
邻接表存储图的bfs遍历
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 100010, M = 100010;
int n, m;
bool st[N]; // 表示当前结点是否被访问过
// 邻接表存储法,head相当于一个指针数组,表示每个结点所指向的第一个结点
struct Node
{
int id;
Node* next;
Node(int _id): id(_id), next(NULL) {}
}*head[N];
void add(int a, int b)
{
auto p = new Node(b);
p -> next = head[a];
head[a] = p;
}
// 出队时输出写法
void bfs(int u)
{
queue<int> q;
q.push(u);
while(q.size())
{
auto t = q.front();
q.pop();
printf("%d ", t);
for(auto p = head[t]; p; p = p -> next)
{
if(!st[p -> id])
{
st[p -> id] = true;
q.push(p -> id);
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
while(m --)
{
int x, y;
scanf("%d%d", &x, &y);
add(x, y);
}
for(int i = 1; i <= n; i ++)
if(!st[i]) bfs(i);
return 0;
}