首页 > 编程语言 >12.12邻接表存储实现图的深度优先遍历(c++)

12.12邻接表存储实现图的深度优先遍历(c++)

时间:2023-12-12 17:36:21浏览次数:34  
标签:遍历 adjList temp int graph c++ ALGraph ArcNode 12.12

今天学习了数据结构中的邻接表存储实现图的深度优先遍历,其中让我受益匪浅,以下是我的解题思路。

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

输入格式:

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

输出格式:

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

 

代码如下:(c++)

#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,c++,ALGraph,ArcNode,12.12
From: https://www.cnblogs.com/tianpeisen/p/17897369.html

相关文章

  • 12.11 迪杰斯特拉方法实现最短路径(c++)
     今天通过自主学习,,对数据结构中的迪杰斯特拉方法实现最短路径进行了深造,让我学会了很多新的东西。首先是问题描述:用迪杰斯特拉算法实现有向网的最短路径输入格式:第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的两个点的及边上的权值,用空......
  • C++ Qt开发:SpinBox数值微调框组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QSpinBox精度数值组件的常用方法及灵活运用。QSpinBox是Qt框架中的一个部件(Widget),用于提供一个方......
  • 学习C++算法入门第二天
    头文件#include<iostream> i=input,o=outputusingnamespacestd;头文件函数:https://blog.csdn.net/qq_32699009/article/details/104615792参考这个HelloWorld!---C学过,第一次接触C++,开启新的语言学习cin>>输入;cout<<输出<<endl; 啥是闰年?---非整百年:能被4整除的为闰......
  • C++语言string、wstring、utf-8互转
    实现了一个CStrCvt类,采用STL实现,可跨平台。注意的是,在s2ws和ws2s函数中需要locale信息,在使用过程中,需要根据实际情况进行设置。如果有需要可以检测文本编码,网上有开源的第三方库,可供使用。不过,准确率需自己判断。为了不影响效率,此类默认按照中文处理。头文件classCStrCvt{pu......
  • 12.12日记
    defGet_Detail(Details_Url):   Detail_Url=Base_Url+Details_Url   One_Detail=requests.get(url=Detail_Url,headers=Headers)   One_Detail_Html=One_Detail.content.decode('gbk')   Detail_Html=etree.HTML(One_Detail_Html)   Detail_Conte......
  • 算法战斗第一天C++1
    A.Watermelon西瓜(timelimitpertest:1second,memorylimitpertest:64megabytes,input:standardinput,output:standardoutput)OnehotsummerdayPeteandhisfriendBillydecidedtobuyawatermelon.Theychosethebiggestandtheripest熟one,int......
  • 在C++中,预处理器提供了一些符号和运算符,这些符号在宏定义中有特殊的含义
    在C++中,预处理器提供了一些符号和运算符,这些符号在宏定义中有特殊的含义。以下是一些常见的符号:#:字符串化运算符,用于将宏参数转换为字符串。#defineSTRINGIZE(x)#xstd::cout<<STRINGIZE(Hello);//输出"Hello"##:连接运算符,用于连接两个标记,使它们成为一个标记。#de......
  • C++调用opencv和windows api完成桌面窗口截图——以梦幻西游为例
    目录程序简介程序/数据集下载代码环境、文件结构代码分析结果展示程序简介项目编写的C++程序,根据输入的字符串,遍历所有桌面窗口标题,查找包含该标题的窗口,对该桌面窗口进行截图,以梦幻西游为例输入:桌面窗口包含的字符串比如输入“梦幻”,程序就会截取桌面“梦幻西游”的窗口输......
  • C++ 用 std::get<> 访问元组
     C++ 用std::get<>访问元组 #include<iostream>#include<tuple>intmain(){//Creatingatuplestd::tuple<int,double,std::string>myTuple(42,3.14,"Hello");//Accessingelementsusingstd::get<>......
  • C++(using namespace std;)
    usingnamespacestd;是C++中的一条指令,用于指示编译器使用标准命名空间std中的所有标识符。这意味着在代码中可以直接使用标准库中的各种类、函数和对象,而无需在每个标识符前面添加std::前缀。以下是关于这条指令的一些解释:using关键字:using是一个关键字,用于创建别......