美文网首页
图的遍历

图的遍历

作者: 农民工__乔Young | 来源:发表于2017-11-08 21:35 被阅读0次
结构
//顶点结构
typedef struct Vnode
{
    Vertex data; //顶点信息
    ArcNode *firstarc; //指向第一条边
} VNode;

//边头结点结构
typedef struct ANode
{
    int adjvex; //该边的终点编号
    struct ANode *nextarc; //指向下一条边的指针
    InfoType info; //该边的权值等信息
} ArcNode;

//图结构
typedef struct
{
    VNode adjlist[MAXV]; //邻接表
    int n, e; //图中顶点数n和边数e
} ALGraph;
int Visited[MAXV] = {0};
深度优先搜索

void DFS(ALGraph *G,int v)
{
    printf("%d", v);//访问该节点
    Visited[v] = 1;//标记该节点被访问
    ArcNode* p_EdgeNode = G->adjlist[v].firstarc;//v的第条一相邻边的边头节点
    while (p_EdgeNode != NULL)//v访问所有的相邻边
    {
        int w = p_EdgeNode->adjvex;//v相邻边的定点下标
        if (Visited[w] == 0)//w尚未本被访问,递归遍历以w起始部分
            DFS(G,w);
        p_EdgeNode = p_EdgeNode->nextarc;//指向顶点v的下一条边的边头节点
    }
}
广度优先搜索

void BFS(ALGraph *G, int v)
{
    ArcNode *p; int w, i;
    int queue[MAXV], front = 0, rear = 0; //定义循环队列
    int visited[MAXV];
    for (int i = 0; i < MAXV; i++)//初始化
        visited[i] = 0;
    //访问第一个节点
    printf("%d\n",v);
    visited[v] = 1;
    //v进队列
    rear = (rear + 1) % MAXV;
    queue[rear] = v;
    while (rear != front)//queue不空
    {
        //队头节点出队
        front = (front + 1) % MAXV;
        w = queue[front];
        ArcNode* p = G->adjlist[w].firstarc;//w的相邻节点
        while (p != NULL)//层序
        {
            if (visited[p->adjvex] == 0)//尚未访问
            {
                //访问
                printf("%d\n",p->adjvex);
                visited[p->adjvex] = 1;
                //入队
                rear = (rear + 1) % MAXV; 
                queue[rear] = p->adjvex;
            }
            p = p->nextarc; //找下一个邻接顶点
        }
    }
}

相关文章

  • 图的深度优先遍历

    数据结构遍历的意义 树的遍历 图的遍历 树的前序遍历 图遍历和树遍历区别 知识回顾 树的深度优先遍历 普通函数和递...

  • 图的深度优先遍历和马踏棋盘算法

    图的深度优先遍历思想 图的遍历通常有两种遍历次序方案: 深度优先遍历和广度优先遍历。深度优先遍历(DepthFir...

  • 图的DFS && BFS遍历

    对图的深度优先遍历: 对图的广度优先遍历:

  • 数据结构与算法学习-图的遍历

    图的遍历可以分为:深度优先遍历和广度优先遍历 一、深度优先遍历 深度优先遍历的实现思路 将图的顶点和边信息输⼊入到...

  • 图和遍历

    邻接矩阵定义一个图 其实就是二维数组来定义 图的遍历 深度搜索遍历 2.广度搜索遍历 遍历

  • 图 深度和宽度遍历

    图的深度遍历依赖于递归、 图的宽度优先遍历依赖于队列

  • 哈夫曼实现 图:十字链表,邻接多重链表,邻接表(无向),邻接表

    图的遍历: 无论是广度优先,还是深度优先都是以箭头方向右边的优先遍历; 广度优先遍历(无向图): 深度优先(无向图...

  • 11.图的广度优先遍历与无权图的最短路径

    图的广度优先遍历与无权图的最短路径 点击这里,前提知晓... 一、图的广度优先遍历 和树的广度优先遍历的思想一样,...

  • 基本数据结构

    一.图二.树 一.图 1.图的遍历: 通过深度优先遍历DFS和广度优先遍历BFS两种方式。深度优先遍历0 1 2 ...

  • 图的遍历

    树的遍历:从图中某一顶点出发,沿着一些边访问图中所有顶点,但使每个顶点仅被访问一次,这个过程叫做图的遍历。一个通常...

网友评论

      本文标题:图的遍历

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