栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

严蔚敏C语言无向图BFS和DFS代码实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

严蔚敏C语言无向图BFS和DFS代码实现

完整代码
#include
using namespace std;
#define MVNum 100 //最大顶点数
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 10

typedef int Status;
typedef struct {
    char vexs[MVNum];//顶点表
    int arcs[MVNum][MVNum];//邻接矩阵
    int vexnum,arcnum;//顶点数和边数
}AMGraph;


int LocateVex(AMGraph G,char v){
    for (int i = 0; i < G.vexnum; ++i) {
        if (v == G.vexs[i]){
            return i;
        }
    }
}

Status CreateUDN(AMGraph &G){
    cout<<"请输入顶点数和边数"<>G.vexnum>>G.arcnum;
    //将顶点存入顶点表
    for (int i = 0; i < G.vexnum; ++i) {
        cout<<"输入第"<<(i+1)<<"顶点"<>G.vexs[i];
    }
    //初始化矩阵
    for (int j = 0; j < G.vexnum; ++j) {
        for (int i = 0; i < G.vexnum; ++i) {
            G.arcs[j][i] = 0;
        }
    }
    //初始化无向图
    for (int k = 0; k < G.arcnum; ++k) {
        char v1,v2;
        cout<<"输入第"<>v1>>v2;
        int i = LocateVex(G,v1);
        int j = LocateVex(G,v2);
        G.arcs[i][j] = 1;
        G.arcs[j][i] = 1;
    }
    return OK;
}
bool visited[MVNum];

void DFS_AM(AMGraph G,int v,bool visited[]){
    cout<
    	//w是v的邻接点
        if (G.arcs[v][w] != 0 && (!visited[w]))
            DFS_AM(G,w,visited);
    }
}

typedef struct {
    int *base;//存储空间的基地址
    int front;//头指针
    int rear;//尾指针
}SqQueue;

Status InitQueue(SqQueue &Q){
    Q.base = new int[MAXSIZE];
    if (!Q.base) exit(OVERFLOW);//存储空间分配失败
    Q.front = Q.rear = 0;//头尾指针置零
    return OK;
}

Status EnQueue(SqQueue &Q,int e){
    if ((Q.rear+1)%MAXSIZE == Q.front) //(循环)队列满了
        return ERROR;
    Q.base[Q.rear] = e;//在队尾插入元素
    Q.rear = (Q.rear+1)%MAXSIZE;//队尾指针加1
    return OK;
}

Status DeQueue(SqQueue &Q,int &e){
    if (Q.front == Q.rear)//对空
        return ERROR;
    e = Q.base[Q.front];
    Q.front = (Q.front+1)%MAXSIZE;//对头指针加1
    return OK;
}
bool QueueEmpty(SqQueue Q){
    if (Q.front == Q.rear)
        return true;
    return false;
}

int FirstAdjVex(AMGraph G,int v){
    for (int i = 0; i < G.vexnum; ++i) {
        if(G.arcs[v][i] != 0)
            return i;
    }
}

int NextAdjVex(AMGraph G,int u,int w){
    for (int i = w+1; i < G.vexnum; ++i) {
        if (G.arcs[u][i] != 0)
            return i;
    }
    return -1;
}

void BFS_AM(AMGraph G,int v,bool visited[]){
    cout<
        int u;
        DeQueue(Q,u);
        for (int w = FirstAdjVex(G,u); w >=0 ; w=NextAdjVex(G,u,w)) {
            if(!visited[w]){
                cout<
    AMGraph G;
    CreateUDN(G);
    for (int i = 0; i < MVNum; ++i) {
        visited[i] = false;
    }
    cout<<"深度优先算法"<
        visited[i] = false;
    }
    cout< 
测试 
请输入顶点数和边数
5 6
输入第1顶点
a
输入第2顶点
b
输入第3顶点
c
输入第4顶点
d
输入第5顶点
e
输入第0边的两个顶点(空格隔开 例:a b)
a b
输入第1边的两个顶点(空格隔开 例:a b)
a d
输入第2边的两个顶点(空格隔开 例:a b)
c b
输入第3边的两个顶点(空格隔开 例:a b)
c d
输入第4边的两个顶点(空格隔开 例:a b)
c e
输入第5边的两个顶点(空格隔开 例:a b)
b e
深度优先算法
abcde
广度优先算法
abdce
Process finished with exit code 0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925403.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号