图的深度优先搜索/广度优先搜索(邻接表实现)

来源:互联网 发布:知乎暨南大学临床医学 编辑:程序博客网 时间:2024/06/06 07:34
//深度优先遍历图返回连通分量数-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;}

0 0
原创粉丝点击