//深度优先遍历图返回连通分量数-
int dfstraverse(LinkedGraph q)
{
int i,count=0;
for(i=0;i<q.n;i++)
visitnode[i]=0;
for(i=0;i<q.n;i++)
if(!visitnode[i])
{
printf("#DFS->CASE[%d]:\n",count);
count++;
dfs(q,i);
}
return count;
}
void DFS(LinkedGraph q)
{
int i,j;
for(i=0;i<q.n;i++)
{
for(j=0;j<q.n;j++)
visitnode[j]=0;
printf("\n");
dfs(q,i);
}
}
void bfs(LinkedGraph g,int i)
{
int j;
EdgeNode *p;
int queue[M],front=0,rear=0;
printf("%c\n",g.adjlist[i].vartex);
visitnode[i]=1;
queue[rear++]=i;//输出被访问节点,并将其入队
while(front<rear)//当队不空
{
j=queue[front++];//出队
p=g.adjlist[j].FirstEdge;//定为到该节点的第一条边
while(p)
{
if(visitnode[p->adjvex]==0)//如果该条边的顶点未访问
{
printf("%c\n",g.adjlist[p->adjvex].vartex);//输出该边的顶点
queue[rear++]=p->adjvex;//把这条边的顶点入队
visitnode[p->adjvex]=1;//标记访问过该顶点
}
p=p->next;//访问下一条边
}
}
}
//广度优先遍历图返回连通分量数
int bfstraverse(LinkedGraph g)
{
int i,count=0;
for(i=0;i<g.n;i++)
visitnode[i]=0;
for(i=0;i<g.n;i++)
if(!visitnode[i])
{
printf("#BFS->CASE[%d]:\n",count);
count++;
bfs(g,i);
}
return count;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。