创建图的邻接矩阵,并实现优先深度搜索

本文介绍如何使用数组存储结构表示图,并提供了无向图的邻接矩阵创建函数createGrapUDG。核心内容包括深度优先搜索(DFS)算法的实现及其在图遍历中的应用。通过示例展示了从输入顶点数量和边的关系,到创建邻接矩阵并进行深度优先搜索的过程。
摘要由CSDN通过智能技术生成

题目:

用数组存储结构作为图的存储结构前提下,试编制图的输入及深度优先搜索遍历的有关子程序;

代码:

#include <iostream>
using namespace std;
#define MAX 100
int visited[MAX];   //初始化访问数组,0代表没有访问,1代表顶点已经访问过了
//定义图的邻接矩阵结构
typedef struct Graph{
    char vertices[MAX]; //顶点表
    int Edge[MAX][MAX]; //邻接矩阵
    int verticeNum; //顶点数目
    int edgeNum;   //边的数目
}Graph;
//创建无向图(Undirected graph)的邻接矩阵
void createGrapUDG(Graph &G){
    int i,j;
    int n,e,x,y;
    cin>>n; //输入顶点数量
    G.verticeNum=n;
    //初始化n个顶点的邻接矩阵
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            G.Edge[i][j]=0;
    //初始化顶点表
    for(i=0;i<n;i++)
        cin>>G.vertices[i];

    cin>>e;     //输入边大的数量
    G.edgeNum=e;
    for(i=0;i<G.edgeNum;i++){
        cin>>x>>y;  //输入x到y的一条边
        G.Edge[x-1][y-1]=1;    //无向图的邻接矩阵是对称的
        G.Edge[y-1][x-1]=1;
    }
    cout<<"邻接矩阵如下:"<<endl;
    for(i=0;i<G.verticeNum;i++){
        for(j=0;j<G.verticeNum;j++){
            cout<<G.Edge[i][j]<<" ";
        }
        cout<<endl;
    }
    
}
/**
*深度优先遍历的算法主体
*从顶点v开始遍历
**/
void  DFS(Graph G,int v){
    int w;
    visited[v]=1;
    cout<<G.vertices[v]<<" ";
    for(w=0;w<G.verticeNum;w++){
        if((G.Edge[v][w])!=0&&(visited[w]==0))
            DFS(G,w);
    }

}

void DFSTravere(Graph G){
    int v;
    for(v=0;v<G.verticeNum;v++)
        visited[v]=0;   //初始化已访问标记数据
    for(v=0;v<G.verticeNum;v++)
        if(visited[v]==0)
            DFS(G,v);
}

int main() {
    Graph G;
    createGrapUDG(G);
    DFSTravere(G);
    return 0;
}

运行效果

输入
在这里插入图片描述

输出
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韭菜盖饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值