另一篇文章:是全部采用递归实现dfs,bfs:http://blog.csdn.net/codeforme/article/details/6036864#,这篇文章存在内存泄漏问题
我的bfs采用队列实现,并且解决了内存泄漏问题
Graph.h
/************************************************************************/
/* 图的邻接表存储结构
这个与我的哈希算法时一样的:顶点表是主要的,里面存放的节点 是边表节点,
边表节点本身里面包含边表节点,建的主表是顶点表*/
/************************************************************************/
#ifndef GRAPH_H
#define GRAPH_H
#define MaxVertexNum 100
#define QueueSize 30
bool visited[MaxVertexNum];
typedef char VertexType;
typedef int EdgeType;
typedef struct node //边表结点 ,
{
int adjvex; //邻接点域 ,注意,这里存储的是其他顶点在顶点表的下标
struct node* next; //域链
//若是要表示边上的权,则应增加一个数据域
}EdgeNode;
typedef struct vnode //顶点边结点
{
//VertexNode():firstedge(NULL){}//默认指针为空
VertexType vertex; //顶点域 ,注意:这里是顶点域的下标,用来表明内存节点的
EdgeNode* firstedge;//边表头指针
int index;
//这里必须加上该顶点在顶点表中的下标,否则宽度优先搜索设置已经访问标记时会无法设定访问标记
void setIndex(int iIndex)
{
index = iIndex;
}
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum]; //AdjList是邻接表类型
typedef struct
{
AdjList adjlist; //邻接表
int n; //图中当前顶点数
int e; //图中当前边数
}ALGraph; //对于简单的应用,无须定义此类型,可直接使用AdjList类型
ALGraph* initALGrap