搜索(未完结版)

前言

图的基础与遍历

图的存储方式

邻接表

List<int []>list[N];

list[x]存储x的所有出点的信息。

list[i][j]={first,second}其中first表示从i出发的某个出点的编号,second表示边权。

list[1]={{2,0},{3,0}}        1这个点有2和3连个出边

邻接矩阵

d[i][j]表示从i到j的边的距离(一般情况下为最短距离)

d[1,2]=0(表示从1到2有一条边)

d[4,3]=-1(不存在对应的边)

DFS(深度优先搜索)

一条道走到黑,走过的路不再走(一种情况尝试到底)

递归

搜索的要点:

1:选定初始状态

2:遍历当前初始状态或状态所产生的合法状态,产生的新状态进入递归

3:检查目标状态是否是合法状态,是则返回,否则继续遍历,重复2-3步骤

常用模板
public static void dfs(){if(当前状态==目标状态){return;}for(寻找新状态){if(状态合法){dfs(新状态);}}
}

顺序不确定,只要走完就行

回溯

从一条路往前走,能进则进,不能进则退

全排列

回溯的模板与dfs的常用模板相同

public static void dfs(){if(当前状态==目标状态){return;}for(寻找新状态){if(状态合法){
//标记当前状态已访问dfs(新状态);
//撤销标记}}
}
图论中的模板
boolean<N> v;//v[i]=true说明i点已经走过  标记数组
void dfs(int x){v[x]=true;//进来对x,打上标记for(int y:list[x]){if(v[y]) continue;//已经打过标记的话,跳过else dfs(y);//否则进入y这个结点}}

BFS(宽度优先搜索)

一层一层往外走,每个点只走一次

通常用于求边权相等情况下的最短距离

BFS一般用队列来实现

boolean <N> vis;//标记数组,v[i]=true表示点已经走过了
queue<int> q;//q表示带拓展的队列
while(q.size>0){//只要队列不为空就一直走int x=q.pop();//弹出来if(v[x]) continue;v[x]=true;//没有走过这个标记for(int y:list[x]){q.push(y);}//遍历这个点的所有出点,压入队列中}

编号3891帮派弟位

问题描述

小明在游戏中参加了一个帮派,这一天他突然想知道自己在帮派中是什么地位,但是帮派的查询系统突然坏了,目前只能知道每个人的附属关系,请问你能帮帮他重建关系网并找出他的地位吗?

给定一个正整数 n ,代表该帮派的总人数,并且小明的序号是 m ,给出这 n 个人中每个人的附属关系,确保给出的关系网为一棵树。帮派地位的定义是按照自己手下有多少帮众决定的,注意手下的手下也算是自己的手下。如果手下的帮众相同则按序号较小的在前面。你能帮助小明找到自己的帮派地位吗?

输入格式

第一行,两个正整数 n (1≤n≤105) 和 m (1≤m≤n) ,代表该帮派的总人数以及小明的序号。

接下来 n−1 行,每行两个正整数,格式如下:

  • l r (1≤l,r≤n) , 代表序号为 l 的人附属于序号为 r 的人。
  • 输出格式
    一行,包含 11 个正整数,输出按手下人数多少排序后小明的排名。
  • 样例输入
    6 4 
    2 1 
    3 1 
    4 2 
    5 2 
    6 5 
    

    样例输出

    5

代码

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {static List<Integer> []list;public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();list = new List[n+1];for(int i=0;i<n+1;i++) {list[i]=new ArrayList<>();}//存储点int []a=new int [n+1];//存储入度for(int i=0;i<n-1;i++) {int l=scan.nextInt();int r=scan.nextInt();list[r].add(l); a[l]++;}int root=0;for(int i=1;i<=n;i++) {//总人数是1-nif(a[i]==0) {root=i;break;}}//找到根节点了int []dp=new int[n+1];//每个结点值的大小dfs(root,dp);int ans=1;for(int i=1;i<m;i++) {if(dp[i]>=dp[m]) {ans++;}//前半部分}for(int i=m+1;i<n;i++) {if(dp[i]>dp[m]) {ans++;}}System.out.println(ans);}public static void dfs(int root,int[] dp) {for(int y:list[root]) {dfs(y,dp);dp[root]+=dp[y]+1;//子节点的子节点数量以及他自己}}}

全排列问题(回溯)

问题描述

输入一个数组n,输出1到n的全排列。

代码

package lanqiaoyun;
import java.util.*;public class quanpai {static List<List<Integer>> list=new ArrayList<>();//存放全排列public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int n=scan.nextInt();int []v=new int [n+1];//表示当前数组访问List<Integer> res=new ArrayList<>();//当前集合存储了多少个元素dfs(n,v,res);for(List<Integer> x:list) {for(int y:x) {System.out.print(y+" ");}System.out.println("");}}public static void dfs(int n,int[] v,List<Integer> res) {if(res.size()==n) {//表示当前集合中已经有n个元素,完成了全排列list.add(new ArrayList<>(res));return ;}for(int i=1;i<=n;i++) {if(v[i]==1) {continue;}//不合法,当前数已经被访问过了res.add(i);v[i]=1;dfs(n,v,res);res.remove(res.size()-1);v[i]=0;}}}

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

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

相关文章

Mouse IFN-α ELISA kit (Quick Test)

干扰素α&#xff08;IFN-α&#xff09;是一类由免疫细胞分泌的内源性调节因子&#xff0c;也被称为白细胞干扰素&#xff0c;主要参与响应病毒感染的先天性免疫。 基于结构特征、受体、细胞来源和生物活性的不同&#xff0c;干扰素可被分为Ⅰ、Ⅱ、Ⅲ三种类型&#xff0c;其中…

一起学习python——基础篇(17)

今天我说一下python中有关文件的操作。 1、检测一个目录里面有无这个文件夹、有无txt文件&#xff0c;代码如下&#xff1a; import os #文件的路径 testPath"D:/pythonFile" testPath2"D:/pythonFile/test.txt" #使用exists()方法检查是否存在文件…

springboot项目如何配置跨域?

在Spring Boot项目中配置跨域&#xff08;CORS&#xff0c;Cross-Origin Resource Sharing&#xff09;主要是为了允许来自不同源&#xff08;不同的协议、域名或端口&#xff09;的前端应用能够访问后端API。Spring Boot提供了多种方式来配置跨域支持。 1. 使用CrossOrigin注…

一篇详解CSS样式

华子目录 CSS常见样式CSS基本语法 文本样式color颜色名称十六进制颜色代码rgb&#xff0c;rgbahsl、hsla预定义颜色值transparent颜色继承 font-stylefont-weightline-heighttext-shadowbox-shadowtext-transformwhite-spacedirection 列表样式list-style-typelist-style-image…

C#:成绩等级转换

任务描述 本关任务&#xff1a;给出一百分制成绩&#xff0c;要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E&#xff0c;如果输入数据不在0~100范围内&#xff0c;请输出一行&#xff1a;“Score is error!”…

RREA论文阅读

Relational Reflection Entity Alignment 关系反射实体对齐 ABSTRACT 实体对齐旨在识别来自不同知识图谱(KG)的等效实体对&#xff0c;这对于集成多源知识图谱至关重要。最近&#xff0c;随着 GNN 在实体对齐中的引入&#xff0c;近期模型的架构变得越来越复杂。我们甚至在这…

为什么tcp需要四次挥手?

首先;我们需要先简单解释下tcp四次挥手都做了什么: tcp终止一个连接&#xff0c;需要经过四次挥手 第一次挥手&#xff1a;客户端发送一个 FIN 报文&#xff0c;报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态&#xff0c;表示停止发送数据&#xff0c;等待服务端的…

Power BI报告在PPT中实时刷新的实现技巧分享

前面我们刚介绍了如何在PPT中展示Power BI报告&#xff1f; 很巧的是&#xff0c;在刚刚的Power BI 2024年4月更新的诸多新特性中&#xff0c;PPT中使用的Power BI插件又有新特性的更新&#xff0c;数据自动刷新功能(新特性仅限国际版使用)&#xff0c;这个新特性支持最低15秒…

已解决javax.xml.bind.JAXBException: JAXB异常的正确解决方法,亲测有效!!!

已解决javax.xml.bind.JAXBException: JAXB异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 审核类定义 检查注解 验证上下文路径 测试序列化与反序列化 适应环境变化 总结 博主v&#xff1…

【3】c++多线程技术之线程同步与互斥

1、线程安全问题与数据竞争 线程安全问题与数据竞争是多线程编程中的重要概念。在C++中,线程安全问题主要涉及到多个线程对共享数据的访问,如果多个线程同时访问同一块内存区域,并且至少有一个线程对该区域进行写入操作,那么就可能发生数据竞争(Data Race)。数据竞争可能…

软件定义车队面临网络安全的曲折之路

当以色列 REE Automotive 设计其 P7 电动汽车底盘时&#xff0c;它是从软件开始工作的&#xff1a;扁平的车辆底盘完全可配置&#xff0c;每个轮胎附近有四个独立的模块&#xff0c;用于转向、制动、悬架和动力传动系统&#xff0c;每个模块均由电子驱动控制单元&#xff08;EC…

网络协议——OSPF(开放式最短路径优先)详解

1.什么是OSPF 开放式最短路径优先OSPF 是一种动态的高度可靠和高度可扩展的路由协议&#xff0c;用于构建大型网络中的动态路由系统 2. OSPF的协议号为&#xff1a;89 3. OSPF的特点: OSPF是链路状态协议使用了区域概念&#xff1a;减少路由选择协议对路由器CPU&#xff0c;…

2022年全国青少年信息素养大赛python初赛真题

这份文档包含了Python初赛的真题,涉及到Python编程的核心知识点,如变量、函数、条件语句、循环语句、导入库等。具体来说,文档中涉及到以下考点: - 变量:包括变量的定义、变量的初始化、变量的赋值、变量的递增、变量的递减等。 - 函数:包括函数的定义、函数的调用、函…

【LeetCode】二叉树类题目详解

二叉树 二叉树的理论基础 二叉树是结点的度数之和不超过2的树&#xff0c;二叉树总共有五种基本形态 二叉树的种类主要有&#xff1a; 满二叉树完全二叉树 二叉树的存储方式 顺序存储链式存储 二叉树的遍历方式 先序遍历&#xff08;深度优先搜索&#xff09;中序遍历&…

蓝桥杯-STL-string

目录 字符串定义 字符串初始化 字符串输入输出 字符串输出 字符串输入 字符串访问 字符串拷贝 字符串拼接 直接相加 append(const char*str,int n) 字符串比较 ​编辑字符串长度length()/size() 字符串查找find(string str) 查找子串substr(int a,int b) 字符串的…

秋招数据库学习2(20240408-20240412共10道)

由于感觉数据库难度可能暂时面试用不到&#xff0c;就先不刷啦 20240408 1.从不订购的客户 SELECT Name AS Customers FROM Customers C LEFT JOIN Orders O ON C.Id O.CustomerId WHERE CustomerId is nullselect customers.name as Customers from Customers wher…

.NET 设计模式—职责链模式(Chain of Responsibility Pattern)

简介 责任链模式是一种对象的行为模式。在责任链模式里&#xff0c;很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递&#xff0c; 直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求&#xff…

基于双向长短期神经网络BILSTM的发生概率预测,基于GRU神经网络的发生概率预

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络BILSTM的发生概率预测,基于GRU神经网络的发生概率预 完整代码:基于双向长短期神经网络BILSTM的发生概率预测,基于GRU神经网络的发生概率预测资源-CSDN文库 https://download.csdn.net/d…

手写ArrrayList

需求 自定义的MyArrayList import java.util.Arrays; import java.util.Objects;public class MyArrayList<E> {private Object[] elementData ; // 存储元素的数组private int size; // 记录 的元素个数private static final int DEFAULT_CAPACITY 10; // 默认容量// …

Eigen笔记2:矩阵拼接

直接贴代码吧&#xff0c;使用的MatrixXd 和<<运算符&#xff1a; int main(int argc, char *argv[]) {Eigen::MatrixXd B(2, 2);B << 1, 2,3, 4;Eigen::MatrixXd C(2, 2);C << 5, 6,7, 8;Eigen::MatrixXd D(2, 2);D << 9, 10,11, 12;Eigen::MatrixXd…