美文网首页
06-图1 列出连通集

06-图1 列出连通集

作者: lucas_cc | 来源:发表于2018-05-04 16:13 被阅读0次

广度优先搜索与深度优先搜索

广度优先搜索

此处举一个特例,用

#include "0_.h"
void BFS(MGraph G)
{
    int v, w, i;
    Queue Q;
    for (i = 0; i < MaxVertexNum; i++) {
        Visited[i] = 0;
    }
    Q = CreatQueue();
    for (i = 0; i < G->nv; i++) {
        if (Visited[i] == 0) {
            printf("{ ");
            Visited[i] = 1;
            printf("%d ", i);
            EnQueue(Q, i);
            while (!IsEmptyQ(Q)) {
                v = DeQueue(Q);
                /*********************************/
                for (w = 0; w < G->nv; w++) {
                    if (!Visited[w] && G->Edge[v][w]) {
                        Visited[w] = 1;
                        printf("%d ", w);
                        EnQueue(Q, w);
                    }
                }
                /*********************************/
            }
            printf("}");
            if (!FinishVisit(G))
                printf("\n");
        }
    }
    return;
}

注释包裹处可替换为下列代码的思路,更具有一般性

w = 0;
/* v为给定的第一个点,先找到v的邻接点,将其入队 */
for (w = FirstAdjV(G, v, w); w < G->nv; w = NextAdjV(G, v, w)) {
    if (!Visited[w]) {
        Visited[w] = 1;
        printf("%d ", w);
        EnQueue(Q, w);
    } else
        break;
}

Vertex FirstAdjV(MGraph G, Vertex v, Vertex w)
{
    int i;
    for (i = w; i < G->nv; i++) {
        if (!Visited[i] && G->Edge[v][i])
            break;
    }
    return i;
}

Vertex NextAdjV(MGraph G, Vertex v, Vertex w)
{
    return FirstAdjV(G, v, w);
}

深度优先搜索

for (i = 0; i < G->nv; i++) {
    if (!Visited[i]) {
        printf("{ ");
        DFS(G, i);
        printf("}\n");
    }
}

void DFS(MGraph G, Vertex v)
{
    int w;
    printf("%d ", v);
    Visited[v] = 1;
    for (w = 0; w < G->nv; w++) {
        if (!Visited[w] && G->Edge[v][w]) {
            DFS(G, w);
        }
    }
}

相关文章

  • 06-图1 列出连通集

    广度优先搜索与深度优先搜索 广度优先搜索 此处举一个特例,用 注释包裹处可替换为下列代码的思路,更具有一般性 深度...

  • 列出连通集

    https://pta.patest.cn/pta/test/558/exam/4/question/9495 解...

  • 06 - 图 1 列出连通集 (25 分)

    给定一个有 N 个顶点和 E 条边的无向图,请用 DFS 和 BFS 分别列出其所有的连通集。假设顶点从 0 到 ...

  • 离散数学期中复习大纲

    图论 边数 距离 (最短)圈长 完全图 完全二部图连通分支数 边连通度(最小割边集基数) 点连通度顶点次数 最大...

  • 活动分组——无向图的连通分量个数

    一、相关概念 连通分量 无向图中,极大连通子图称为连通分量1)连通图的连通分量只有一个,即自身2)非连通的无向图有...

  • union-find 算法

    1、前言 union-find 为并查集算法,原本的用途是判断图的连通性问题,连通性是指图中的两个节点是否相连。说...

  • 极大连通子图 极小连通子图 连通分量

    有向图不存在极小连通子图的概念 连通图的生成树为该连通图的一个极小连通子图

  • 图的基本概念2

    连通(无向图)与强连通(有向图) 常考考点:n个顶点的连通图(强连通图)最少有多少条边 如果原图是一个连通图或者强...

  • 2020-09-09学习内容

    1.图的部分1.连通,连通分量,强连通2.图的存储方式2.1邻接矩阵法2.2邻接表,节点用顺序存。链表用链式去存,...

  • 3. 最小生成树算法

    "图的基本概念"中,我们总结了无向图之连通图,有向图之强连通图概念,下面补充一些概念 连通网:在连通图中,若图的边...

网友评论

      本文标题:06-图1 列出连通集

      本文链接:https://www.haomeiwen.com/subject/njnjlftx.html