图的深度优先搜索(数据结构实训)

题目:

图的深度优先搜索
描述:
图的深度优先搜索类似于树的先根遍历,是树的先根遍历的推广。即从某个结点开始,先访问该结点,然后深度访问该结点的第一棵子树,依次为第二顶子树。如此进行下去,直到所有的结点都访问为止。在该题中,假定所有的结点以“A”至“Z”中的若干字符表示,且要求结点的访问顺序根据“A”至“Z”的字典顺序进行访问。例如有如下图:

如果要求从H开始进行深度优先搜索,则搜索结果为:H->A->K->U->E.
输入:
输入只包含一个测试用例,第一行为一个自然数n,表示顶点的个数,第二行为n个大写字母构成的字符串,表示顶点,接下来是为一个n*n大小的矩阵,表示图的邻接关系。数字为0表示不邻接,否则为相应的边的长度。
最后一行为一个字符,表示要求进行深度优先搜索的起始顶点。
输出:
用一行输出深度优先搜索结果,起始点为给定的顶点,各顶点之间用一个空格隔开(注意后面的提示)。

样例输入:
5
HUEAK
0 0 2 3 0
0 0 0 7 4
2 0 0 0 0
3 7 0 0 1
0 4 0 1 0
H

样例输出:
H A K U E

代码:

代码与图的广度搜索差不多,不同的就是将队列变为栈

以下两个代码都差不多,都是利用对应的ascll码转换成0~25相应的数字,理论上来说是一样的

权值在本题没有使用

需注意如图:

输入:

5
HUEAG
0 0 2 3 0
0 0 0 7 4
2 0 0 0 0
3 7 0 0 1
0 4 0 1 0
U

输出:

U A G H E 

第一个栈直接储存字符,使用时换成数字

import java.util.Scanner;
import java.util.Stack;public class Xingyuxingxi {public static void main(String[] args){Scanner sc=new Scanner(System.in);int a=sc.nextInt();String b=sc.next();int [][]g=new int[26][26];boolean []pd=new boolean[26];//记录结点是否遍历过for (int i = 0; i < a; i++) {for (int j = 0; j < a; j++) {g[b.charAt(i)-'A'][b.charAt(j)-'A'] = sc.nextInt();//把字符转换成1~25的相应下标,当假设b.charAt(i)='A',b.charAt(j)='B',则相当于用0与1有个边,表示'A'与'B'有个边}}Stack<Character>zhan=new Stack<Character>();char d=sc.next().charAt(0);zhan.push(d);while(!zhan.isEmpty()){d=zhan.pop();int y=d-'A';if(!pd[y])System.out.print(d+" ");pd[y]=true;for (int i = 25; i >=0 ; i--) {//从最后一个字母开始入栈,保证了小的字母先出栈,栈先进后出if(g[y][i]!=0&&!pd[i])//非0表示有连接,false表示没被标记,权值在这里没有用{char zm=(char)(i+'A');zhan.push(zm);}}}}
}

第二个先全部换成数字,栈储存数字,最后输出转换成字符

import java.util.Scanner;
import java.util.Stack;public class Xingyuxingxi {public static void main(String[] args){Scanner sc=new Scanner(System.in);int a=sc.nextInt();String b=sc.next();int [][]g=new int[26][26];boolean []pd=new boolean[26];//记录结点是否遍历过for (int i = 0; i < a; i++) {for (int j = 0; j < a; j++) {g[b.charAt(i)-'A'][b.charAt(j)-'A'] = sc.nextInt();//把字符转换成1~25的相应下标,当假设b.charAt(i)='A',b.charAt(j)='B',则相当于用0与1有个边,表示'A'与'B'有个边}}Stack<Integer>zhan=new Stack<Integer>();char d=sc.next().charAt(0);zhan.push(d-'A');while(!zhan.isEmpty()){int y=zhan.pop();if(!pd[y])System.out.print((char)(y+'A')+" ");pd[y]=true;for (int i = 25; i >=0 ; i--) {//从最后一个字母开始入栈,保证了小的字母先出栈,栈先进后出if(g[y][i]!=0&&!pd[i])//非0表示有连接,false表示没被标记,权值在这里没有用{zhan.push(i);}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每天五分钟计算机视觉:通过残差块搭建卷积残差神经网络Resnet

本文重点 随着深度神经网络的层数的增加,神经网络会变得越来越难以训练,之所以这样就是因为存在梯度消失和梯度爆炸问题。本节课程我们将学习跳跃连接方式,它可以从某一网络层获取激活a,然后迅速反馈给另外一层,甚至是神经网络的更深层,从而解决梯度消失的问题。 传统的…

关于命令行方式的MySQL服务无法启动问题原因之一解决

这里无法启动服务的原因为系统某些进行占用了3306端口问题 当你遇到无法启动的问题时&#xff0c;可以尝试通过netstat -ano命令查看系统进行信息&#xff0c;验证是否3306端口被占用 在本地地址列如果发现3306端口被占用&#xff0c;则通过 taskkill /f /pid 进程id命令关闭进…

matlab 点云放缩变换

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 缩放可以独立应用于三个坐标轴,如将点 ( x , y , z ) ( x

dtm分布式事务框架之SAGA 实战

一.dtm分布式事务框架之SAGA 1.1DTM介绍 DTM是一款开源的分布式事务管理器&#xff0c;解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 通俗一点说&#xff0c;DTM提供跨服务事务能力&#xff0c;一组服务要么全部成功&#xff0c;要么全部回滚&#xff0c;避免只更…

【天线了解】1.004天线的了解以及使用

一。004天线使用步骤 1.打开天线 &#xff08;1&#xff09;天线的各种版本 注意&#xff1a; 《1》天线包括单通道天线程序&#xff0c;双通道天线程序等。 《2》在没有连接天线时&#xff0c;有的天线程序打不开。 &#xff08;2&#xff09;打开软件前的配置工作 注意&…

接鸡冠^^

欢迎来到程序小院 接鸡冠 玩法&#xff1a;左右移动棒棒君(小海豹)接住鸡冠&#xff0c;避开炸弹&#xff0c;若不小心接住炸弹则游戏结束&#xff0c; 赶紧接鸡冠吧&#xff0c;看看你能够接住多少鸡冠哦^^。。开始游戏https://www.ormcc.com/play/gameStart/211 html <di…

【精选】设计模式——策略设计模式-两种举例说明,具体代码实现

Java策略设计模式 简介 策略设计模式是一种行为型设计模式&#xff0c;它允许在运行时选择算法的行为。 在软件开发中&#xff0c;我们常常需要根据不同情况采取不同的行为。通常的做法是使用大量的条件语句来实现这种灵活性&#xff0c;但这会导致代码变得复杂、难以维护和扩…

Unity打包EXE自定义(拖拽)窗口大小

代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Runtime.InteropServices; public class MyWindow : MonoBehaviour {[DllImport("user32.dll")]private static extern IntPtr GetActiveWindow(…

CSS-自适应导航栏(flex | grid)

目标&#xff1a;实现左右各有按钮&#xff0c;中间是内容&#xff0c;自适应显示中间的内容导航栏&#xff0c;即 根据中间的宽度大小显示内容。 自适应导航栏 总结&#xff1a;推荐 flex布局 / grid布局 flex布局&#xff1a; 两侧 flex:1; ----->中间自适应 grid布局&…

uniapp(微信小程序)聊天实例,支持图片,语音,表情(附源码)

效果预览 安装教程 配置 请参考Dome 会话配置 {info:{// 用户关键字userKey:2666,// 用户手机userPhone:15252156614,// 用户昵称userName: 健健,// 头像headImg: http://d.hiphotos.baidu.com/image/h%3D300/sign0defb42225381f3081198ba999004c67/6159252dd42a2834a75bb01…

CRM客户关系管理系统的主要功能有哪些?

我们都知道&#xff0c;CRM系统可以帮助企业加快业务增长。如果一个企业能提高业务效率、跨团队协作、有效管理客户、轻松共享和同步数据&#xff0c;那么企业竞争力将极大地提高。基于此&#xff0c;我们说说CRM客户关系管理系统的主要功能分析。 完整的CRM是什么样的&#x…

红队专题-开源资产扫描系统-ARL资产灯塔系统

ARL资产灯塔系统 安装说明问题 &#xff1a; 安装说明 源码地址 https://github.com/TophantTechnology/ARL https://github.com/TophantTechnology/ARL/wiki/Docker-%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85-ARL 安装环境 uname -a Linux VM-24-12-centos 3.10.0-1160.49.1.e…

亚马逊云科技re:Invent,生成式AI正在彻底改变开发者的工作方式

去年此时&#xff0c;ChatGPT横空出世席卷全球&#xff0c;许多人称其意味着AI的iPhone时刻到来。CSDN创始人蒋涛对此曾预测&#xff1a;「下一步就是应用时刻&#xff0c;新应用时代将来临……大模型将推动更多的AI应用程序员诞生」。 在2023亚马逊云科技re:Invent全球大会第三…

Linux--环境变量

一.基本概念 * 环境变量 (environment variables) 一般是指在操作系统中用来指定操作系统运行环境的一些参数 * 如&#xff1a;我们在编写 C/C 代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但 是照样可以链接成功&am…

使用jenkins插件Allure生成自动化测试报告

前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告&#xff0c;后来也尝试过用Python的PyH模块自己构建测试报告&#xff0c;在后来看到了RobotFramework的测试报告&#xff0c;感觉之前用的测试报告都太简陋&#xff0c;它才是测试报告应该有的样子。也就是在…

微信小程序 -- ios 底部小黑条样式问题

问题&#xff1a; 如图&#xff0c;ios有的机型底部伪home键会显示在按钮之上&#xff0c;导致点击按钮的时候误触 解决&#xff1a; App.vue <script>export default {wx.getSystemInfo({success: res > {let bottomHeight res.screenHeight - res.safeArea.bott…

c语言五子棋

下面是一个简单的C语言五子棋实现示例&#xff1a; #include <stdio.h>#include <stdlib.h>#define BOARD_SIZE 15char board[BOARD_SIZE][BOARD_SIZE];void init_board() { int i, j; for (i 0; i < BOARD_SIZE; i) { for (j 0; j < BOARD_…

HarmonyOS4.0从零开始的开发教程09页签切换

HarmonyOS&#xff08;七&#xff09;页签切换 List组件和Grid组件的使用 Tabs组件的使用 概述 在我们常用的应用中&#xff0c;经常会有视图内容切换的场景&#xff0c;来展示更加丰富的内容。比如下面这个页面&#xff0c;点击底部的页签的选项&#xff0c;可以实现“首页…

CTF工控工业互联网(ISC)复现总结WP(超详细)

工业互联网复现 Modbus协议&#xff1a;MMS协议&#xff1a;ISC工业互联网比赛题目复现&#xff1a;Modbus协议分析&#xff1a;组态软件安全分析&#xff1a;工业协议分析1&#xff1a;工业协议分析2&#xff1a;特殊的工控流量&#xff1a; Modbus协议&#xff1a; Modbus 市…

JavaScript中的连续赋值问题a.x = a = {n:2}

输出以下代码的执行结果并解释为什么 var a {n: 1}; var b a; a.x a {n: 2}; console.log (a.x); console.log (b.x); 下面来分析下这段简单代码的工作步骤&#xff0c;从而进一步理解js引用类型“赋值”的工作方式。 首先第一行和第二行 var a {n:1}; var b a; …