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