题目:https://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=1148
分析:
题目不难,但要注意题目涉及的图是无向图,所以建议按照邓公教材的风格,使用三个状态来表示当前顶点未发现,即从未入队,已发现,即在队中,已访问,即入队过,在主函数中调用即可,注意要使用邻接表。
代码:
#include<iostream>
#define MAXSIZE 10001
#define UNDISCOVERED 0
#define DISCOVERED 1
#define VISITED 2
using namespace std;
struct EdgeNode{
int vsub;
EdgeNode* succ;
};
struct VertexNode{
EdgeNode* fstEdge;
};
VertexNode adjList[MAXSIZE];
int queue[MAXSIZE],status[MAXSIZE],front=0,rear=0,i,j,k,m,n;//注意全局数组元素自动初始化为0
int BFS(int v){
queue[rear]=v;rear=(rear+1)%MAXSIZE;
status[v]=DISCOVERED;//当前顶点已发现,入队
while(front!=rear){