广度优先算法(BFS)

广度优先算法(Breadth-First Search)是在图和树领域的搜索方法,其核心思想是从一个起始点开始,访问其所有的临近节点,然后再按照相同的方式访问这些临近节点的节点,这种访问方式类似涟漪泛起,一层一层的扩散。

广度优先算法解决的问题:

  1. 从A点出发,有没有一条路径可以到达B点
  2. 如果有的话,能不能找到最短的路径。
  3. 图/树的遍历

广度优先算法的实现(C++):

要遍历的图结构:

image

using System;
using System.Collections;
using System.Reflection;
using UnityEngine;namespace Framwork
{/// <summary>/// Playerprefs 存储类/// </summary>public class PlayerPrefsManager{private static PlayerPrefsManager instance=new PlayerPrefsManager();public static PlayerPrefsManager Instance => instance;private PlayerPrefsManager(){}/// <summary>/// 存取数据的方法/// </summary>/// <param name="obj">数据实体</param>/// <param name="name">数据名称</param>public void SaveData(object data, string keyName){Type type = data.GetType();FieldInfo[] infos = type.GetFields();string tempKey="null";FieldInfo tempInfo = null;for (int i = 0; i < infos.Length; i++){//获取数据数据类型tempInfo = infos[i];Debug.Log("Types==="+tempInfo);//类的名字+类的类型 + 数据内容名字+数据类型//作为存储的keyName键tempKey = keyName + "_" + type.Name + "_" + tempInfo.Name+ "_" + tempInfo.FieldType.Name;SaveValue(tempInfo.GetValue(data),tempKey);}//进行值的获取//tempInfo.GetValue(data);PlayerPrefs.Save();}/// <summary>/// 读取数据的类型/// </summary>/// <param name="type">要读取的数据类型</param>/// <param name="name">要读取的数据名称</param>/// <returns>返回数据实体</returns>public object LoadData(Type type, string name){//获取数据中的类型FieldInfo[] infos = type.GetFields();//创建存储数据信息的实体object data = Activator.CreateInstance(type);string tempName = null;FieldInfo tempInfo = null;for (int i = 0; i < infos.Length; i++){tempInfo = infos[i];//数据结构中的数据名称tempName = name + "_" + type.Name + "_" +tempInfo.Name+"_"+tempInfo.FieldType.Name;//数据结构中的数据名称类型//装载的容器  容器中的数据 //进行数据装载tempInfo.SetValue(data,LoadValue(tempInfo.FieldType,tempName));}return data;}/// <summary>/// 进行具体的类型数据的存储/// </summary>/// <param name="data"></param>/// <param name="keyName"></param>private void SaveValue(object value, string keyName){Type fieldType = value.GetType();if (fieldType == typeof(int)){Debug.Log("存储int"+value);PlayerPrefs.SetInt(keyName,(int)value);}else if (fieldType == typeof(float)){Debug.Log("存储float"+value);PlayerPrefs.SetFloat(keyName,(float)value);}else if (fieldType == typeof(string)){Debug.Log("存储string"+value);PlayerPrefs.SetString(keyName,value.ToString());}//对于List存储的设置//根据存储的字段类型和IList是否是父子关系else if(typeof(IList).IsAssignableFrom(fieldType)){//父类装子类IList list=value as IList;//存储元素数量PlayerPrefs.SetInt(keyName,list.Count);Debug.Log("存储List长度为"+list.Count);int index = 0;foreach (var obj in list){//存储list列表中元素内容//命名形式是 list名字+索引编号//递归调用存储SaveValue(obj,keyName+index);index++;}}else if (typeof(IDictionary).IsAssignableFrom(fieldType)){IDictionary dictionary = value as IDictionary;//存储数据个数PlayerPrefs.SetInt(keyName,dictionary.Count);Debug.Log("存储Dic长度为"+dictionary.Count);int index = 0;foreach (var key in dictionary.Keys){//存储键SaveValue(key,keyName+"_key_"+index);//存储值 SaveValue(dictionary[key],keyName+"_value_"+index);index++;}}//自定义数据类型的存储 进行解析else {SaveData(value,keyName);}}private object LoadValue(Type type, string name){if (type == typeof(int)){return PlayerPrefs.GetInt(name,0);}else if (type == typeof(float)){return PlayerPrefs.GetFloat(name,0.0f);}else if (type == typeof(string)){return PlayerPrefs.GetString(name,"");}else if (typeof(IList).IsAssignableFrom(type)){//读取列表int count = PlayerPrefs.GetInt(name);IList tempList=Activator.CreateInstance(type) as IList;for (int i = 0; i < count; i++){//获取List中存储元素的类型 type.GetGenericArguments()[0]tempList.Add(LoadValue(type.GetGenericArguments()[0],name+i));}return tempList;}else if (typeof(IDictionary).IsAssignableFrom(type)){//进行对字典的读取int count = PlayerPrefs.GetInt(name);IDictionary tempDictionary=Activator.CreateInstance(type) as IDictionary;for (int i = 0; i < count; i++){tempDictionary.Add(LoadValue(type.GetGenericArguments()[0], name + "_key_" + i),LoadValue(type.GetGenericArguments()[1], name + "_value_" + i));}return tempDictionary;}else{//读取自定义类成员的设置return LoadData(type, name);}}}
}

 

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

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

相关文章

HINSTANCE是什么?

HINSTANCE 就是 HMODULE&#xff1a;

队列OJ--循环队列

目录 题目链接&#xff1a;622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09;​​​​​ 题解&#xff1a; ​编辑 代码实现&#xff1a; 完整代码&#xff1a; 题目链接&#xff1a;622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09;​​​​​ 题解&#x…

python 对比数据库,生成sql

import pymysqldef get_table_structure(connection, cursor, database, table):# 获取表结构query f"SHOW COLUMNS FROM {database}.{table}"cursor.execute(query)return cursor.fetchall()def generate_create_table(cursor, table_structure, database, table):…

jenkins传参给robotframework

在做自动化的时候&#xff0c;需要使用jenkins传参给rf&#xff0c;rf根据传来的变量运行&#xff0c;在将变量传递给py脚本文件。特此记录。 一、配置jenkins 构建的命令使用如下格式即可&#xff08;注意空格&#xff09;&#xff1a; cd D:\xxx\test call pybot --variabl…

英语 更新学习英语的过程

吃饭相关 目录 吃饭相关 询问 would 主语 like noun/to do? 询问他人意愿 What would 主语 like ( to do) ? 询 问他人的意愿 餐饮用具 烹饪 询问 would 主语 like noun/to do? 询问他人意愿 Would you like dinner&#xff1f; Would you like meat? Woul…

go语言学习-异常处理

1、异常场景 网络故障硬件故障组件故障输入错误逻辑错误链路调度错误 2、异常处理方式 # python或者java异常处理 try 可能出现的错误 catch对错误进行处理 xxx,err : 代码 if err ! nil {代码出现错误&#xff0c;需要做处理 }3、自定义错误 有两种方法&#xff1a;1、通过…

砖家测评:腾讯云标准型S5服务器和s6性能差异和租用价格

腾讯云服务器CVM标准型S5和S6有什么区别&#xff1f;都是标准型云服务器&#xff0c;标准型S5是次新一代云服务器规格&#xff0c;标准型S6是最新一代的云服务器&#xff0c;S6实例的CPU处理器主频性能要高于S5实例&#xff0c;同CPU内存配置下的标准型S6实例要比S5实例性能更好…

视频剪辑技巧:批量剪辑新篇章,AI智剪来领航

随着数字媒体的飞速发展&#xff0c;视频剪辑已经成为一项重要的工作。在繁忙的工作中&#xff0c;如何高效、准确地完成批量剪辑是一项具有挑战性的任务。近年来&#xff0c;AI智剪的出现为视频剪辑工作带来了新的解决方案&#xff0c;引领着批量剪辑的新篇章。在AI智剪的帮助…

为了摆脱 Android ,亚马逊开发基于Linux的操作系统

导读亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”&#xff0c;以便在 Fire TV、智能显示器和其他联网设备上取代 Android 系统。 亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”&#xff0c;以便在 Fire TV、智能显示器和其他联网设备上取代 Andr…

终于有人把数据资产入表知识地图总结出来了,轻松看懂

在当前数字化的浪潮下&#xff0c;数据已经成为劳动、土地、知识、技术以后的第五大生产要素&#xff0c;“数据就是资源”已成为共识。如今数据资产“入表”已成定局&#xff0c;数据资产化迫在眉睫。 2023年8月21日&#xff0c;财政部正式印发《企业数据资源相关会计处理暂行…

科技的成就(五十三)

503、任天堂首次公开 Switch 2016 年 10 月 20 日&#xff0c;任天堂首次公开 Switch 正式名称及造型。Switch 是任天堂推出的混合型游戏机&#xff0c;可作为家用游戏机&#xff0c;也可作为便携式掌机。Switch 在开发过程中就以代号 NX 而闻名&#xff0c;成为当年的现象级产…

什么样的企业可以使用免费版的CRM?

市面上大部分的免费CRM不需要付费即可使用&#xff0c;但是对于使用人数和功能进行了部分限制。下面我们就来说说&#xff0c;免费CRM的适用对象是谁&#xff1f; 1、初创/小微企业 这种小微企业没有太多的资金&#xff0c;也没有复杂的客户管理需求&#xff0c;仅仅需要一款…

生产环境_移动目标轨迹压缩应用和算法处理-Douglas-Peucker轨迹压缩算法

场景&#xff1a; 我目前设计到的场景是&#xff1a;以路面上行驶的汽车为例&#xff0c;即在地图应用中&#xff0c;对GPS轨迹数据进行压缩&#xff0c;减少数据传输和存储开销&#xff0c;因为轨迹点太频繁了&#xff0c;占用空间太大&#xff0c;运行节点太慢了&#xff0c…

设置ALPHA开发板通过tftp服务加载kernel与设备树文件

一. 简介 为了方便调试&#xff0c;开发板可以暂时设置为 从 ubuntu虚拟机下载 kernel 与设备树文件&#xff0c;并运行。 本文学习如何设置&#xff0c;设置方法具体就是更改 uboot源码中 bootcmd 与 bootargs参数。 二. 设置ALPHA开发板通过tftp服务加载kernel与设备树文…

姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现)

姿态估计 手势动作实时识别项目(基于mediapipe、keras进行实现) 0、功能展示1、项目原理介绍2、数据集采集脚本3、将采集到的动作数据集利用mediapipe库检测手部关键点信息,转换成数据信息保存到本地4、训练一个效果一般的随机森林分类器5、使用Kreas训练一个效果好点的全连…

提高软件测试覆盖率的5个重点

软件测试覆盖率是软件测试中的一个重要指标&#xff0c;它有利于保障软件质量、提高软件可靠性和可维护性。软件测试覆盖率能够发现并修复代码缺陷&#xff0c;确保代码的正确性&#xff0c;提高软件的稳定性&#xff0c;降低成本和风险。 因此进一步提高软件测试覆盖率对于软件…

Linux 之查看标准错误码工具

目录 1. Linux 之查看标准错误码工具 1. Linux 之查看标准错误码工具 $ sudo apt install moreutils$ errno -l EPERM 1 不允许的操作 ENOENT 2 没有那个文件或目录 ESRCH 3 没有那个进程 EINTR 4 被中断的系统调用 EIO 5 输入/输出错误 ENXIO 6 没有那个设备或地址 E2BIG 7 参…

Oauth2认证及Spring Security Oauth2授权码模式

Oauth2认证 Oauth2简介 简介 第三方认证技术方案最主要是解决认证协议的通用标准问题&#xff0c;因为要实现跨系统认证&#xff0c;各系统之间要遵循一定的接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时&#xff0c;任何第三方都可以使…

ICCV 23丨3D-VisTA:用于 3D 视觉和文本对齐的预训练Transformer

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2308.04352 开源代码&#xff1a;http://3d-vista.github.io 摘要&#xff1a; 3D视觉语言标定&#xff08;3D-VL&#xff09;是一个新兴领域&#xff0c;旨在将…

类型体系与基本数据类型(第三节)

目录 前言 一、标量 1.1 类模板的声明 1.2 基于CPU的特化版本 1.3 标量的主体类型 前言 一个深度学习框架的初步实现为例&#xff0c;讨论如何在一个相对较大的项目中深入应用元编程&#xff0c;为系统优化提供更多的可能。 以下内容结合书中原文阅读最佳&#xff01;&a…