首页 > 其他分享 >邻接表存储实现图的深度优先遍历

邻接表存储实现图的深度优先遍历

时间:2022-12-23 21:12:39浏览次数:45  
标签:存储 遍历 adjList temp int graph ALGraph ArcNode 邻接

编写程序,实现由邻接表存储实现无向图的深度优先搜索遍历的功能。顶点为字符型。

输入格式:

第一行输入顶点个数及边的个数,第二行依次输入各顶点,第三行开始依次输入边的两个顶点,用空格分开。最后输入深度优先遍历的起始点。

输出格式:

输出深度优先遍历结果,空格分开,若起始点不合理,则输出error。

#include<iostream>
#include<queue>
using namespace std;
struct ArcNode
{
    int adjvex;               //该弧所指向的顶点的位置
    ArcNode * next;           //指向下一条弧的指针
                              //int weight;边上是否有权
};
 
typedef struct VNode
{
    int vertex;              //顶点信息
    ArcNode * firstarc;       //指向第一条依附该顶点的弧的指针 
}AdjList[20];
 
struct ALGraph
{
    AdjList adjList;
    int vexNum;               //图的顶点数
    int arcNum;               //图的弧数
};
bool visited[20];//设置标志数组
void CreateGraph(ALGraph & graph);
void DFSTraverse(ALGraph & graph); 
int temp_2=1;
int main()
{ int temp_1;

    ALGraph graph;
    CreateGraph(graph);
    cin>>temp_1;
   //cout<<temp_1;
     for(int i=0;i<graph.vexNum;i++)
    {
         
    if(temp_1==graph.adjList[i].vertex)
    {
        temp_2=0;
        
    }
        
    }
    if(temp_2==0)
    {
        DFSTraverse(graph);
    }
    
    if(temp_2==1){
        cout<<"error";
    }
    return 0;
}
void CreateGraph(ALGraph & graph)
{
    cin >> graph.vexNum;
    cin >> graph.arcNum;
    for (int i = 0; i < graph.vexNum; i++)
    {
        cin >> graph.adjList[i].vertex;
        graph.adjList[i].firstarc = nullptr;
    }
    int h1, h2;
    ArcNode * temp;
    for (int i = 0; i < graph.arcNum; i++)
    {
        cin >> h1 >> h2;
        temp = new ArcNode;
        temp->adjvex = h2;
        temp->next = graph.adjList[h1].firstarc;
        graph.adjList[h1].firstarc = temp;
        temp = new ArcNode;
        temp->adjvex = h1;
        temp->next = graph.adjList[h2].firstarc;
        graph.adjList[h2].firstarc = temp;
    }
}
void DFS(ALGraph & graph, int v)
{
    visited[v] = true;
    cout << graph.adjList[v].vertex << " ";
 
    ArcNode * p = graph.adjList[v].firstarc;
 
    while (p)
    {
        if (!visited[p->adjvex])
            DFS(graph, p->adjvex);
 
        p = p->next;
    }
}
void DFSTraverse(ALGraph & graph)
{
    for (int i = 0; i < graph.vexNum; i++)//初始化访问标志数组
        visited[i] = false;
 
    for (int i = 0; i < graph.vexNum; i++)
    {
        if (!visited[i])//如果没有访问
            DFS(graph, i);
    }
}

 

标签:存储,遍历,adjList,temp,int,graph,ALGraph,ArcNode,邻接
From: https://www.cnblogs.com/psh888/p/17001635.html

相关文章

  • 线性表A,B顺序存储合并
    有两张非递增有序的线性表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。元素类型为整型输入格式:第一行输入输入表A的各个元......
  • 力扣-105-从前序与中序遍历序列构造二叉树/剑指Offer-07
    基本步骤是这样:先看先序序列,可以确定根节点,然后在中序遍历中就可以将二叉树划成左子树和右子树两拨对左右子树递归上述步骤好像直到怎么遍历二叉树,却对怎么重建二叉树......
  • MySQL存储过程之简单批量招数据
    1.创建一个test_batchInsert的存储过程delimiter$$$createproceduretest_batchInsert(injint)begindeclareiintdefault0;seti=0;starttransaction;while......
  • 深入理解Kafka核心设计-日志存储
    一、文件系统中存储方式1.1树形结构图1.2目录结构【分而治之】一个topic有多个分区,一个分区就是一个Log(文件夹),文件夹命名方式:<topic>-<partition>如创建订单topic:CRE......
  • 【SQL Server】存储过程带参数输出——output
    在SQL Server 中,如果要用一个存储过程返回字符串应该怎么做?用output参数。错误方式接下来,展示一下,常见的错误方法CREATEPROCEDUREtestStringASBEGINRETURN......
  • SpringBoot2.x系列教程85--SpringBoot中整合阿里云OSS存储
    SpringBoot2.x系列教程85--SpringBoot中整合阿里云OSS存储作者:一一哥一.阿里云OSS简介1.存储服务简介我们进行项目开发,很多时候都需要进行文件、图片等的上传,对于很多项目......
  • 每天一点基础K8S--K8S中的存储方案PV、PVC
    持久卷PV官网文档https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/什么是PV和PVC持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员......
  • FastDFS客户端与自定义文件存储系统
    本文的前提是已经启动FastDFS的tracker和storage安装安装提供给大家的fdfs_client-py-master.zip到虚拟环境中 pipinstallfdfs_client-py-master.zip 链接:ht......
  • 解决封装echarts图标后,遍历生成多个echarts图,只能渲染出来一个问题
    Vue页面多次渲染echarts封装的组件但只出现一个(原因分析,多方案解决,最后附上源码)原因分析首先我们要知道echart实例的创建方式通过获取div的id从而初始化echar......
  • 自定义python Django文件存储系统
    在学习Django框架的时候,我们已经讲过,Django自带文件存储系统,但是默认文件存储在本地,在本项目中,我们需要将文件保存到FastDFS服务器上,所以需要自定义文件存储系统。自定义......