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

news2024/11/25 6:48:46

题目:

图的广度优先搜索

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

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

样例输入:
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 E K U

代码:

跟图的深度优先搜索代码差不多,不同的就是把栈改成队列

import java.util.Queue;
import java.util.ArrayDeque;
import java.util.Scanner;

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'有个边
            }
        }
        Queue<Character>dui=new ArrayDeque<Character>();
        char d=sc.next().charAt(0);
        dui.add(d);
        while(!dui.isEmpty())
        {
            d=dui.poll();
            int y=d-'A';
            if(!pd[y])
                System.out.print(d+" ");
            pd[y]=true;
            for (int i = 0; i <26 ; i++) {//从第一个字母开始入队,保证了小的字母先出队,队列先进先出
                if(g[y][i]!=0&&!pd[i])//非0表示有连接,false表示没被标记,权值在这里没有用
                {
                    char zm=(char)(i+'A');
                    dui.add(zm);
                }
            }
        }
    }
}

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

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

相关文章

idea利用SpringMVC框架整合ThymeLeaf

简洁一些&#xff1a;两个重要文件 1.controller指定html文件:我们访问http://localhost:8080/test package com.example.appledemo.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import o…

一分钟教你弄懂KMP算法

问题背景 KMP算法主要应用与字符串的比较&#xff0c;有一个主串&#xff0c;有一个子串&#xff0c;我们要通过一种方式来查看子串是否为主串的一部分。我们通常的想法是&#xff1a;主串和子串左对齐&#xff0c;一个字符一个字符进行比较&#xff0c;如果其中有个字符不匹配…

北京市经信局局长姜广智带队调研三六零 强调大模型应与行业结合

12月6日&#xff0c;北京市经济和信息化局局长姜广智、副局长王磊带队走访调研三六零集团&#xff0c;就共促城市级数字安全基础设施项目落地&#xff0c;打造引领行业发展标杆项目&#xff0c;推动大模型落地应用赋能产业、行业发展等话题进行交流。360集团创始人周鸿祎接待来…

h5和小程序通信

相信大部分人可能都会遇到要在微信小程序里面嵌入h5&#xff0c;这个时候h5和小程序之间的通信就成了不可避免的一环&#xff0c;不用紧张&#xff0c;其实很简单。 看一下微信小程序官方文档怎么说 首先我们按照文档上的指示&#xff0c;在需要向小程序传递参数的页面引入 jw…

从霸总短剧的热播,看出海品牌如何巧妙利用短剧进行全球推广

近期&#xff0c;中国式“霸总”短剧在国外走红&#xff0c;看着这熟悉的剧情模式和作品结构&#xff0c;让一众国内网友震惊的同时&#xff0c;也为中国品牌的全球推广带来了新的思路和灵感。本文Nox聚星将和大家从霸总短剧在海外的热播出发&#xff0c;探讨出海品牌如何巧妙利…

【动态规划】02斐波那契数列模型_三步问题(easy)

题目链接&#xff1a;leetcode三步问题 目录 题目解析&#xff1a; 算法原理: 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码: 题目解析&#xff1a; 题目让我们求小孩到达n阶台阶的时候&#xff0c;可以有多少上楼梯方式&#xff1b; 由题可得&a…

理解IO复用的三种模式——select、poll、epoll

文章目录 一、Select1、select简介2、select实现原理3、select编程4、select常见问题 二、poll1、poll简介2、poll实现原理3、poll编程4、poll常见问题 三、epoll1、epoll简介2、epoll实现原理3、epoll编程4、epoll常见问题 Linux IO模型是指Linux操作系统中用于实现输入输出的…

MySQL 包含查询特殊符号数据

当你模糊查询包含特殊符号的数据时&#xff0c;如果不加上特殊处理&#xff0c;查询结果是错误的。 如果你查的数据包含如上字符或者其他特殊字符&#xff0c;需要加上\转义字符。 如下示例&#xff1a; SELECT * FROM t_bc_user t where t.name LIKE %\_%

四、分代垃圾回收机制及垃圾回收算法

学习垃圾回收的意义 Java 与 C等语言最大的技术区别&#xff1a;自动化的垃圾回收机制&#xff08;GC&#xff09; 为什么要了解 GC 和内存分配策略 1、面试需要 2、GC 对应用的性能是有影响的&#xff1b; 3、写代码有好处 栈&#xff1a;栈中的生命周期是跟随线程&…

ncnn模型部署——使用VS2019把项目打包成DLL文件

一、项目打包成DLL文件 1.创建动态链接库DLL项目 创建完成&#xff0c;项目中包含源文件dllmain.cpp, pch.cpp&#xff0c;头文件framework.h, pch.h 2.编写和配置DLL项目 &#xff08;1&#xff09;配置pch.h文件&#xff0c;在头文件pch.h中定义宏&#xff0c;宏的作用的是…

VUE3给table的head添加popover筛选、时间去除时分秒、字符串替换某字符

1. VUE3给table的head添加popover筛选 <el-tableref"processTableRef"class"process-table"row-key"secuId":data"pagingData"style"width: 100%"highlight-current-row:height"stockListHeight":default-exp…

晶圆测试工艺介绍

第一章、晶圆测试简介 晶圆测试的方式&#xff0c;主要是通过测试机&#xff08;事先编好程序&#xff09;和探针台的联动&#xff0c;依靠探针卡的接触衔接&#xff0c;进行晶圆级的芯片测试。 当探针卡Probecard 的探针正确接触晶圆wafer 内一颗 芯片die的每个接触点bondpads…

毕设:《基于hive的音乐数据分析系统的设计与实现》

文章目录 环境启动一、爬取数据1.1、歌单信息1.2、每首歌前20条评论1.3、排行榜 二、搭建环境1.1、搭建JAVA1.2、配置hadoop1.3、配置Hadoop环境&#xff1a;YARN1.4、MYSQL1.5、HIVE(数据仓库)1.6、Sqoop&#xff08;关系数据库数据迁移&#xff09; 三、hadoop配置内存四、导…

网络层(1)——概述

一、概述 网络层毫无疑问是最复杂的一层&#xff0c;涉及到大量的协议与结构的内容。在如今主流的设计中&#xff0c;大家都会把网络层分成两个部分&#xff1a;数据平面、控制平面。其中数据平面指的是网络层中每台路由器的功能&#xff0c;它决定了到达路由器端口输入链路之一…

软考2018下午第六题改编逻辑(状态模式)

在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象 package org.example.状态模式.软考航空;/*** author lst* date 2023年12月07日 15:37*/ class FrequentFlyer {CState state;double flyMiles;public FrequentFlyer() {…

为什么 AWS 数据库不讲 HTAP

在 AWS re:Invent 2023 掌门人 Adam Selipsky 的 Keynote 上&#xff0c;数据库方面最重磅的主题是 Zero-ETL&#xff0c;从 TP 数据库 (RDS, Aurora, DynamoDB) 同步数据到 AP 数据库 (Redshift)。 Zero-ETL 是 AWS 在去年 re:invent 2022 上推出的概念&#xff0c;今年则继…

Peter算法小课堂—贪心算法

课前思考&#xff1a;贪心是什么&#xff1f;贪心如何“贪”&#xff1f; 课前小视频&#xff1a;什么是贪心算法 - 知乎 (zhihu.com) 贪心 贪心是一种寻找最优解问题的常用方法。 贪心一般将求解过程分拆成若干个步骤&#xff0c;自顶向下&#xff0c;解决问题 太戈编程第…

simulink enable模块——使能子系统案例仿真分析

1.案例分析 仍以一个简单的乘法增益案例分析 分析&#xff1a;可以看到&#xff0c;在满足条件性才条用使能子系统&#xff0c;在t1s和3s时刻&#xff0c;进行增益操作&#xff0c;这和上篇博客中的触发trigger子系统相同的作用。 simulink trigger模块使用——多种调用案例分…

膜结构建筑:未来体育可持续发展的绿色引擎

随着城市化的飞速发展&#xff0c;现代建筑迫切需要创新性的解决方案&#xff0c;而膜结构建筑以其独特的设计理念和可持续性特点&#xff0c;正在成为未来城市发展的重要引擎。本文将深入探讨膜结构建筑在可持续城市发展中的关键作用&#xff0c;包括其在节能减排、资源有效利…

【Qt开发流程】之元对象系统

描述 Qt的元对象系统&#xff08;Meta-Object System&#xff09;是Qt框架的核心机制之一&#xff0c;它提供了运行时类型信息&#xff08;RTTI&#xff09;和信号与槽&#xff08;Signals and Slots&#xff09;机制的支持。元对象系统在Qt中扮演了很重要的角色&#xff0c;它…