数据结构_图的遍历

深度优先搜索遍历

遍历思想

邻接矩阵上的遍历算法


cpp 复制代码
void Map::DFS(int v)
{
    int w, i, k;
    visited[v] = true; // 标记已访问
    cout << v << " ";

    // 找出与v相连接的其他所有顶点,存放在AdjVex数组中
    int* AdjVex = new int[Vexnum]; // 存放连接的顶点编号
    for (i = 0; i < Vexnum; i++)
    {
        AdjVex[i] = -1;
    }

    // k是数组AdjVex的空位置下标,初始化为0表示数组AdjVex一开始没有数据
    k = 0;
    for (i = 0; i < Vexnum; i++)
    {
        // 如果顶点i与v连接
        if (Maxtrix[v][i] == 1)
        {
            AdjVex[k] = i;
            k++;
        }
    }

    i = 0;
    w = AdjVex[i];
    while (w != -1)
    {
        // 如果顶点w未访问
        if (visited[w] == false)
        {
            DFS(w);
        }
        i++;
        w = AdjVex[i];
    }
    delete[] AdjVex;
}

广度优先搜索遍历及其实现

实现


cpp 复制代码
void Map::BFS(Graph G, int v)
{
    int w, u;
    queue<int> Q;
    visited[v] = true; // 访问第v个顶点
    cout << v << " ";  // 输出访问的顶点

    Q.push(v);
    while (!Q.empty())
    {
        u = Q.front();
        Q.pop();
        for (w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w))
        {
            if (!visited[w])
            {
                cout << w << " ";
                visited[w] = true;
                Q.push(w);
            }
        }
    }
}
cpp 复制代码
int Map::FirstAdjVex(Graph& G, int v)
{
    for (int i = 0; i < G.num; i++)
    {
        if (G.arcs[v][i] != 0)
        {
            return i;
        }
    }
    return -1;
}

int Map::NextAdjVex(Graph& G, int v, int w)
{
    for (int i = w + 1; i < G.num; i++)
    {
        if (G.arcs[v][i] != 0)
            return i;
    }
    return -1;
}
相关推荐
weixin_419658313 小时前
数据结构之LinkedList
数据结构
无敌的小笼包8 小时前
第四讲:类和对象(下)
数据结构·c++
鑫鑫向栄8 小时前
[蓝桥杯]解谜游戏
数据结构·c++·算法·职场和发展·蓝桥杯
与己斗其乐无穷9 小时前
刷题记录(7)二叉树
数据结构·算法
鑫鑫向栄9 小时前
[蓝桥杯]整理玩具
数据结构·c++·算法·蓝桥杯·动态规划
-qOVOp-10 小时前
408第一季 - 数据结构 - 线性表II
数据结构
2401_8769075210 小时前
IEC 61347-1:2015 灯控制装置安全标准详解
大数据·数据结构·人工智能·算法·安全·学习方法
T.Ree.11 小时前
【数据结构】_排序
数据结构·算法·排序算法·排序
多吃蔬菜!!!16 小时前
排序算法C语言实现
数据结构
零叹16 小时前
篇章六 数据结构——链表(二)
数据结构·链表·linkedlist