bfs要用到队列以及邻接表(或邻接矩阵)此类数据结构
#define maxn 100010 //顶点数量
#define maxm 200010 //边的数量。若是求无向图或树的边的数量,那么边数就是顶点数的两倍左右
typedef struct{ //定义顶点的值以及它周围连接点的位置关系
int v;
int next;
}Edges;
int head[maxn]; //所有节点的地址
Edges edgess[maxm]; //所有节点的信息
int edgescount; //边的数量
void initedges() //初始化
{
edgescount = 0;
memset(head, -1, sizeof(head));
}
void addedges(int u, int v) //此处是用了头插法
{
edgess[edgescount].v = v;
edgess[edgescount].next = head[u];
head[u] = edgescount;
edgescount++;
}
void bfs(int n, int s, bool visited[maxn])
{
int q[maxn], i, front = 0, rear = 0;
for (i = 0; i < n; i++)
{
visited[i] = false;
}
visited[s] = true;
q[rear++] = s;
while (front < rear)
{
int u = q[front++];
for (int e = head[u]; e != -1; e = edgess[e].next)
{
int v = edgess[e].v;
if (!visited[v])
{
visited[v] = true;
q[rear++] = v;
}
}
}
}