首页 > 其他分享 >问题 K: 数据结构基础11-图的深度优先遍历

问题 K: 数据结构基础11-图的深度优先遍历

时间:2024-08-09 13:55:56浏览次数:16  
标签:11 遍历 入栈 int 栈顶 相连 顶点 数据结构

题目描述

读入一个邻接矩阵存储的无向图,输出它的深度优先遍历序列。
 




 

输入

第1行1个整数n,表示图中的顶点数,2<=n<=100
接下来的n行是一个n*n的邻接矩阵,a[i][j]=1表示顶点i和顶点j之间有直接边相连,a[i][j]=0表示没有直接边相连,保证i=k时a[i][j]=0,且a[i,j]=a[j,i].

输出

输出1~n的某一种排列,表示从顶点1开始,对该图进行深度优先遍历得到的顶点序列,每两个数之间,用一个“-”分隔

样例输入 Copy
8
0 1 1 0 0 0 0 0
1 0 0 1 1 0 0 0
1 0 0 0 0 0 1 1
0 1 0 0 0 1 0 0
0 1 0 0 0 1 0 0
0 0 0 1 1 0 0 0
0 0 1 0 0 0 0 1
0 0 1 0 0 0 1 0
样例输出 Copy
1-2-4-6-5-3-7-8
提示

问题分析:
图的深度优先遍历指,先任意找一个顶点入栈,即为栈顶元素,然后找到跟栈顶元素相连的一个顶点入栈,接着继续把跟栈顶元素相连的一个顶点入栈,若栈顶元素没有相连的顶点或者相连的顶点都已经入过栈,那么栈顶元素就出栈,循环直到栈为空。那么元素的入栈顺序就是图的深度优先遍历

说真的这个题应该没有必要用栈写吧,用栈不是无故增加了代码的长度吗,就这样普通的写一下好了,我觉得这个归类归到栈有点硬凑的感觉。。。

#include<iostream>
#include<stack>
using namespace std;
int a[101][101];
int f[101];
void find(int k, int n)
{
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (a[k][j] == 1 && f[j] == 0)
            {
                cout << "-" << j;
                f[j] = 1;
                find(j, n);
            }
        }
    }
}
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cin >> a[i][j];
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (a[i][j] == 1)
            {
                cout << i ;
                f[i] = 1;
                find(i, n);
                return 0;
            }
        }
    }
    return 0;
}

标签:11,遍历,入栈,int,栈顶,相连,顶点,数据结构
From: https://blog.csdn.net/2301_80550438/article/details/141060332

相关文章

  • 【11月杭州,邀您投稿参会】2024年计算机视觉与图像处理国际学术会议 (CVIP 2024)
    【重要信息】会议官网:iccvip.org大会时间:2024年11月15日-17日大会地点:中国杭州一轮截稿日期:2024年8月21日接受/拒稿通知:投稿后1周内收录检索:EICompendex,Scopus【大会简介】2024年计算机视觉与图像处理国际学术会议(CVIP2024)将于2024年11月15日-17日在中国杭州举......
  • 25版王道数据结构课后习题详细分析 第三章栈、队列和数组 3.1 栈 选择题部分
    一、单项选择题————————————————————————————————————————解析:栈和队列的逻辑结构都是相同的,都属于线性结构,只是它们对数据的运算不同。正确答案:B————————————————————————————————————......
  • 浙大数据结构慕课课后题(03-树2 List Leaves)
    题目要求:给定一棵树,您应该按照从上到下、从左到右的顺序列出所有叶子。输入规格: 每个输入文件都包含一个测试用例。对于每种情况,第一行都给出一个正整数N(<=10),这是树中节点的总数--因此节点的编号从0到N-1.然后N行紧随其后,每行对应一个节点,并给出节点的左右子节点......
  • [数据结构] 划分树
    介绍划分树,一种数据结构,和线段树很像,常用来解决求区间第$k$小的问题,支持在线,但不支持修改,时间复杂度:建树$\Theta(n\logn)$+单次查询$\Theta(\logn)$,空间复杂度$\Theta(n\logn)$,在这种问题及其扩展问题上具有优良的性能,但其它问题就凸显出其局限性;思想划分......
  • 11.面试题——消息队列RabbitMQ
    1.RabbitMQ是什么?特点是什么?RabbitMQ是一种开源的消息队列中间件,用于在应用程序之间进行可靠的消息传递。它实现了AMQP(AdvancedMessageQueuingProtocol)协议,提供了强大的消息处理能力。RabbitMQ的主要特点包括:可靠性:RabbitMQ使用可靠的消息传递机制,确保消息能够安全地传......
  • 0211-使用 dummy 发送数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/linux目标前面使用了pnet自己模拟的一个数据链路层的发送和接收过程。现在使用linux的dummy来模拟数据的发送和接收。新建网络接......
  • 安装windows11系统跳过微软账号登录,使用本地账号登录方法
    在安装win11系统,进行到如图下所示界面的时候,暂停下 我们可以按下键盘的Shift+F10按键(部分电脑是Fn+Shift+F10),这时屏幕会出现命令行窗口,如图下所示 我们需要在命令行内输入代码oobe\bypassnro.cmd然后回车,这时候电脑会重启。PS:若无法输入命令,可以电脑插入鼠标点击一下命令行......
  • LeetCode 1111. 有效括号的嵌套深度
    1111.有效括号的嵌套深度有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。详情参见题末「嵌套深度」部分。有......
  • Avalonia 11.1 获取平台调用的窗口的方法
    本文和大家介绍如何在11.1版本的Avalonia里获取平台调用的窗口的方法,如Windows获取窗口句柄,在Linux下获取X11的xid窗口信息在拿到任意的Avalonia的Visual元素,可通过TopLevel的GetTopLevel方法获取到其窗口。由于Avalonia是一个跨平台的UI框架,因此不能假......
  • 数据结构之Map与Set(上)
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程(ಥ_ಥ)-CSDN博客所属专栏:数据结构(Java版) 目录二叉搜索树Map和Set的介绍与使用 Map的常用方法及其示例Set的常用方法及其示例哈希表 冲突-概念冲突-避免-哈希函数设计冲突-避免-负载因子调节......