- //深度优先遍历图返回连通分量数-
- 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;
- }
版权声明:本文为博主原创文章,未经博主允许不得转载。