06-图3 六度空间 (30分)
思路分析:这里主要列举一下自己犯的错误,因为这个题目要求每一个结点都要BFS,所以说每一个结点BFS之前都要将Visited数组初始化为没有访问的状态,我忘记了,所以运行一直是错误。还要注意的是,这里是从1开始的,所以Visited数组存储最好也从1开始。之所以这里选择邻接表的存储方式,是因为由题意得知 N*(N-1)=N*33,N解出来等于67,所以当N越大,M也就越小,所以这是一个 稀疏图,用邻接表的方式最好。
代码写得有点零乱…
#include<iostream>
#include<iomanip>
#include<queue>
#define MaxSize 1001
using namespace std;
//邻接点
typedef struct VNode* PtrToVNode;
struct VNode
{
PtrToVNode Next;
int Data;
};
typedef PtrToVNode AdjNode;
//边
typedef struct ENode
{
int V1,V2;
}*Edge;
//顶点表
typedef struct VNodes
{
AdjNode FirstEdge;
}AdjList[MaxSize];
//图结构
typedef struct Graphs
{
AdjList G;
int Nv,Ne;
}*LGraph;
LGraph CreateGraph(int VertexNum);
LGraph BuildGraph();
void InsertEdge(LGraph Graph,Edge E);
int BFS(LGraph Graph,