王道2025数据结构代码总结:第六章 图

6.2.1

图的邻接矩阵存储结构

#define MaxVertexNum 100
typedef char VertexType;
typedef int EdgeType;
typedef struct{
    VertexType vex[MaxVertexNum];
    EdgeType edge[MaxVertexNum][MaxVertexNum];
    int vernum,arcnum;
}MGraph;

6.2.2

图的邻接表的存储结构

#define MaxVertexNum 100
typedef struct ArcNode{
    int adjvex;
    struct ArcNode *nextarc;
    //InfoType info;
}ArcNode;
typedef struct Vnode{
    VertexType data;
    ArcNode *firstarc;
}Vnode,AdjList[MaxVertexNum];
typedef struct{
    AdjList vertices;
    int vexnum,arcnum;
}ALGraph;

6.3.1

广度优先搜索(伪代码)

bool visited[MAX_VERTEX_NUM];
void BFSTraverse(Graph G){
    for(i=0;i<G.vexnum;++i)
        visited[i]=FALSE;
    InitQueue(Q);
    for(i=0;i<G.vexnum;++i)
        if(!visited[i])
            BFS(G,i);
}

邻接表实现广度优先搜索

void BFS(ALGraph G,int i){
    visit(i);
    visited[i]=TRUE;
    EnQueue(Q,i);
    while(!IsEmpty(Q)){
        DeQueue(Q,v);
        for(p=G.vertices[v].firstarc;p;p=p_>nextarc){
            w=p->adjvex;
            if(visited[w]==FALSE){
                visit(w);
                visited[w]=TRUE;
                EnQueue(Q,w);
            }
        }
    }
}

邻接矩阵实现广度优先搜索

void BFS(MGraph G,int i){
    visit(i);
    visited[i]=TRUE;
    EnQueue(Q,i);
    while(!IsEmpty(Q)){
        DeQueue(Q,v);
        for(w=0;w<G.vexnum,w++){
            if(visited[w]==FALSE&&G,edge[v][w]==1){
                visit(w);
                visited[w]=TRUE;
                EnQueue(Q,w);
            }
        }
    }
}

BFS算法求解单源最短路径

void BFS_MIN_Distance(Graph G,int u){
    //d[i]表示从u到i结点的最短路径
    for(i=0;i<G.vexnum;;++i)
        d[i]=∞;
    visited[u]=TRUE;
    d[u]=0;
    EnQueue(Q,u);
    while(!IsEmpyt(Q)){
        DeQueue(Q,u);
        for(w=FirstNeighbor(G,u);w>=0;w=NextNeighbor(G,u,w))
            if(!visited[w]){
                visited[w]=TRUE;
                d[w]=d[u]+1;
                EnQueue(Q,w);
            }
    }
}

6.3.2

深度优先搜索

bool visited[MAX_VERTEX_NUM];
void DFSTraverse(Graph G){
    for(i=0;i<G.vexnum;i++)
        visited[i]=FALSE;
    for(i=0;i<G.vexnum;i++)
        if(!visited[i])
            DFS(G,i);
}

邻接表实现深度优先搜索

void DFS(ALGraph G,int i){
    visit(i);
    visited[i]=TRUE;
    for(p=G.vertices[v].firstarc;p;p=p_>nextarc){
        j=p->adjvex;
        if(visited[j]==FALSE){
            DFS(G,j);
        }
    }
}

邻接矩阵实现深度优先搜索

void DFS(MGraph G,int i){
    visit(i);
    visited[i]=TRUE;
    for(j=0;j<G.vexnum;j++){
        if(visited[j]==FALSE&&G.edge[i][j]=1)
            DFS(G,j);
    }
}

6.4.1

最小生成树(模板)

GENERIC_MST(G){
    T=NULL;
    while T 未形成一棵树;
        do 找到一条最小代价边(u,v)并且加入T后不会产生回路;
            T=T∪(u,v);
}

Prim算法(模板)

void Prim(G,T){
    T=Ø;
    U={w};
    while((V-U)!=Ø){
        设(u,v)是使u∈U与v∈(V-U),且权值最小的边;
        T=T∪{(u,v)};
        U=U∪{v};
    }
}

Kruskal算法(模板)

void Kruskal(V,T){
    T=V;
    numS=n;
    while(numS>1){
        从E中取出权值最小的边(u,v);
        if(v和u属于T中不同的连通分量){
            T=T∪{(v,u)};
            numS--;
        }
    }
}

6.4.4

拓扑排序

bool TopologicalSort(Graph G){
    InitStack(S);
    int i;
    for(i=0;i<G.vexnum;i++)
        if(indegree[i]==0)
            Push(S,i);
    int count=0;
    while(!IsEmpty(S)){
        Pop(S,i);
        print[count++]=i;
        for(p=G.vertices[i].firstarc;p=p->nextarc){
        //将所有i指向的顶点的入度减1,并将入度为0的顶点压入栈S
            v=p->adjvex;
            if(!(--indegree[v]))
                Push(S,v);
        }
    }
    if(count<G.vexnum)
        return false;
    else
        return true;
}

### 王道408数据结构相关内容概述 王道408系列书籍作为计算机专业考研的经典教材之一,其《数据结构》部分涵盖了广泛的知识体系和解题技巧。以下是基于参考资料整理的内容框架以及具体章节说明。 #### 数据结构整体目录概览 该书按照逻辑顺序分为多个核心主题模块,主要包括但不限于以下几个方面[^1]: - **第一章 绪论** - 计算机算法基本概念 - 时间复杂度与空间复杂度分析方法 - **第二章 线性表** - 线性表的定义及其操作实现 - 静态存储表示法与动态分配技术 - **第三章 栈、队列和数组** - 栈的基本性质及其实现方式(含链式存储) ```c typedef struct Linknode { ElemType data; // 数据域 struct Linknode *next; // 指针域 } LiStack; ``` - 循环队列的概念与应用实例[^2] - **第四章 字符串** - 基本模式匹配算法介绍如KMP等 - **第五章 数组与广义表** - **第六章 树** - 各种树形结构特性讲解(二叉树,线索化二叉树) - **第七章 ** - 连通性和最短路径等问题求解策略 - **第八章 查找** - 动态集上的查找运算讨论(BST,RBTree...) - **第九章 排序** - 多种经典排序算法原理剖析(MergeSort,BucketSort...) 上述仅为简化版大纲展示,实际书中每节还配有大量练习习题供读者巩固所学知识点并提升实战能力。 ```python def example_function(): """此函数仅用于演示如何嵌入代码片段""" pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值