无向图的邻接多重表已经在之前一篇文章里介绍了:传送门
下面我进一步地来介绍如何实现无向图的初始化,深度优先搜索DFS,广度优先搜索BFS,深度优先搜索的非递归算法
1.无向图的初始化:
//建立顶点表
void AddVex(OLGraph *G)
{
int i;
for(i=0;i<G->vexnum;i++)
{
G->xlist[i].data=i;
G->xlist[i].firstout=NULL;
}
}
//给点v1和点v2建立一条权重为cost的边
void AddArc(OLGraph *G,int v1,int v2,int cost)
{
ArcNode *pArc=new ArcNode;
pArc->headvex=v1;
pArc->tailvex=v2;
pArc->weight=cost;
pArc->hlink=G->xlist[v1].firstout;
pArc->tlink=G->xlist[v2].firstout;
G->xlist[v1].firstout=pArc;
G->xlist[v2].firstout=pArc;
}
例如,当我们需要初始化一个图map,含有4个顶点,3条边的时候。我们可以在main函数(或者另写一个初始化Init函数)里通过以下方法实现:
void InitMap(OLGraph &map)
{
map.vexnum=4; //初始化图的顶点数目
AddVex(&map); //为该图建立4个点
AddArc(&map,0,1,1); //为该图建立3条权值为1的边
AddArc(&map,0,2,1);
AddArc(&