注 :关于邻接表的创建,输出链接
https://blog.csdn.net/qq_42146775/article/details/84898997
理解DFS/BFS
算法
void BFS(这个节点)
{
标记这个节点
指向这个节点的第一个临界点
while(节点!=NULL)
{
if(节点没有标记) BFS(这个节点)
标记过 则 指向下一个节点
}
}
void DFS(这个节点)
{
标记这个节点
节点进队
while(队不空)
{
出队
指向这个出队节点的第一个邻接点
while(该节点 != NULL)
{
if (节点没有标记)
{
标记这个节点
这个节点入队
}
标记过 则 指向下一个节点
}
}
}
具体代码
void DFS(AdjGraph *adjGraph,int v,int *m)
{
AdjNode *node;
cout<<v<<" "<<endl;
m[v]=1;
node=adjGraph->headNode[v].FirstNode;
while(node!=NULL)
{
if(m[node->AdjNodeNum]==0)
DFS(adjGraph,node->AdjNodeNum,m);
node=node->NextNode;
}
}
void BFS(AdjGraph *adjGraph,int v,int *m)
{
AdjNode *node;
int a;
SqQueue *qu;
InitQueue(qu);
m[v]=1;
cout<<v<<" ";
EnQueue(qu,v);
while(!QueueEmpty(qu))
{
DeQueue(qu,a);
node=adjGraph->headNode[a].FirstNode;
while(node!=NULL)
{
if(m[node->AdjNodeNum]==0)
{
cout<<endl;
cout<<node->AdjNodeNum<<" ";
m[node->AdjNodeNum]=1;
EnQueue(qu,node->AdjNodeNum);
}
node=node->NextNode ;
}
}
}
非连通图的遍历
for(int i=0;i<n;i++)
DFS()/BFS