【算法可视化】图论专题

运行平台

Algorithm Visualizer

图的深度优先遍历

// import visualization libraries {
const { Tracer, Array1DTracer, GraphTracer, LogTracer, Randomize, Layout, VerticalLayout } = require('algorithm-visualizer');
// }// define tracer variables {
const graphTracer = new GraphTracer().directed(false);
const visitedTracer = new Array1DTracer('visited');
const logger = new LogTracer();
Layout.setRoot(new VerticalLayout([graphTracer, visitedTracer, logger]));
graphTracer.log(logger);
const G = Randomize.Graph({ N: 8, ratio: .3, directed: false });
graphTracer.set(G);
Tracer.delay();
// }function DFS(graph, source) {const stack = [[source, null]];const visited = [];let node;let prev;let i;let temp;for (i = 0; i < graph.length; i++) {visited.push(false);}// visualize {visitedTracer.set(visited);// }while (stack.length > 0) {temp = stack.pop();node = temp[0];prev = temp[1];if (!visited[node]) {visited[node] = true;// visualize {visitedTracer.patch(node, visited[node]);if (prev !== undefined && graph[node][prev]) {graphTracer.visit(node, prev);Tracer.delay();} else {graphTracer.visit(node);Tracer.delay();}// }for (i = 0; i < graph.length; i++) {if (graph[node][i]) {stack.push([i, node]);}}}}return visited;
}const visited = DFS(G, 0);
let check = true;
for (let i = 0; i < visited.length; i++) check &= visited[i];
// logger {
if (check) {logger.println('图是连通的');
} else {logger.println('图不是连通的');
}
// }

图的广度优先遍历

// import visualization libraries {
const { Tracer, GraphTracer, LogTracer, Randomize, Layout, VerticalLayout } = require('algorithm-visualizer');
// }// define tracer variables {
const tracer = new GraphTracer().directed(false).weighted();
const logger = new LogTracer();
Layout.setRoot(new VerticalLayout([tracer, logger]));
tracer.log(logger);
//随机产生一个6个节点,无向,权值为1的图,边的数量为完全图的30%
const G = Randomize.Graph({ N: 6, ratio: .3, directed: false, weighted: false });
tracer.set(G);
Tracer.delay();
// }function BFS() {const W = []; // W[i] 表示从根节点到i节点的权值const Q = [];let i;for (i = 0; i < G.length; i++) {W.push(MAX_VALUE); //将每个节点的权值初始化为无穷大// visualize {tracer.updateNode(i, MAX_VALUE);// }}W[s] = 0;Q.push(s); // 将起点加入队列// visualize {tracer.visit(s, undefined, 0);Tracer.delay();// }while (Q.length > 0) {const node = Q.shift(); // 头节点出队for (i = 0; i < G[node].length; i++) {if (G[node][i]) { // if the edge from current node to the i-th node existsif (W[i] > W[node] + G[node][i]) { // if current path is shorter than the previously shortest pathW[i] = W[node] + G[node][i]; // update the length of the shortest pathQ.push(i); // add child node to queue// visualize {tracer.visit(i, node, W[i]);Tracer.delay();// }}}}}return W[e];
}let s = Randomize.Integer({ min: 0, max: G.length - 1 }); // s = start node
let e; // e = end node
do {e = Randomize.Integer({ min: 0, max: G.length - 1 });
} while (s === e);
let MAX_VALUE = 0x7fffffff;
// logger {
logger.println(`图的广度优先搜索查找从起点 ${s} 到终点 ${e} 的最短路径`);
// }
const minWeight = BFS(s);
// logger {
if (minWeight === MAX_VALUE) {logger.println(`无法从 起点 ${s} 到终点 ${e} `);
} else {logger.println(`从起点 ${s} 到终点 ${e} 的最短路径的最短路径长度为 ${minWeight}`);
}
// }

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

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

相关文章

嵌入式蓝桥杯做题总结

第十二届省赛 按键代码 ——自认为比较巧妙&#xff0c;定时器3被设置为10ms进入一次中断&#xff0c;代替了HAL_Delay(10)的方法消抖&#xff1b; 运用状态机机思想实现检测多个按键检测——且分为两个状态&#xff0c;其中一个状态PB&#xff11;和PB&#xff12;的按键不…

stable-diffusion-webui-forge 介绍,安装,运行

一 stable-diffusion-webui-forge 介绍 stable-diffusion-webui-forge 的作用和stable-diffusion-webui一样&#xff0c;但性能上作了优化&#xff0c;说得上是是stable-diffusion-webui优化版&#xff0c;本人在使用stable-diffusion-webui时偶尔会有内存不够报错。本人的环境…

手写分布式配置中心(四)增加实时刷新功能(长轮询)

上一篇文章中实现了短轮询&#xff0c;不过短轮询的弊端也很明显&#xff0c;如果请求的频率较高&#xff0c;那么就会导致服务端压力大&#xff08;并发高&#xff09;&#xff1b;如果请求的频率放低&#xff0c;那么客户端感知变更的及时性就会降低。所以我们来看另一种轮询…

Mysql面试总结

基础 1. 数据库的三范式是什么&#xff1f; 第一范式&#xff1a;强调的是列的原子性&#xff0c;即数据库表的每一列都是不可分割的原子数据项。第二范式&#xff1a;要求实体的属性完全依赖于主关键字。所谓完全 依赖是指不能存在仅依赖主关键字一部分的属性。第三范式&…

牛客 子序列的权值最小值(贪心)

链接&#xff1a;https://ac.nowcoder.com/acm/contest/76803/A 来源&#xff1a;牛客网 题目描述 给定一个长度为 n n n 的数组 a a a&#xff0c;求数组所有非空子序列权值的最小值。 定义子序列 a i , a j , … , a k a_i,a_j,…,a_k ai​,aj​,…,ak​ 的权值为 a i a…

什么是reids缓存雪崩、缓存击穿、缓存穿透?

缓存雪崩、缓存击穿和缓存穿透是与redis缓存系统相关的三种常见问题&#xff0c;它们都可能导致缓存系统性能下降或失效。下面分别解释这三种情况并提供例子&#xff1a; 缓存雪崩&#xff08;Cache Avalanche&#xff09;&#xff1a; 定义&#xff1a; 缓存雪崩是指在某个时…

UDP通信发送和接收 || UDP实现全双工通信

recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 功能: 从套接字中接收数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 …

基于springboot实现的幼儿园管理系统

一、系统架构 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 系统管理-用户管理 03. 系统管理-页面管理 04. 系统管理-角色管…

Day 50[补档] |● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III class Solution { public:int maxProfit(vector<int>& prices) {if(prices.size() 0) return 0;vector<vector<int>> dp(prices.size(), vector<int>(5,0));//dp[i][j] 表示根据j的方法数下&#xff0c;第i天时候最大…

win11配置Mask DINO小白踩坑记录

win11配置Mask DINO踩坑记录 1 准备工作2 创建python环境和安装detectron22.1 安装前提2.2 安装流程2.2.1 cl.exe的错误2.2.2 SetuptoolsDeprecationWarning的错误 3 MaskDINO运行3.1 运行demo 前情提要&#xff1a;需要复现Mask DINO&#xff0c;但是实验室没有Linux的电脑&am…

keycloak18.0.0==本地源码启动

github下载源码&#xff0c; 版本18.0.0 java和maven的版本如下 E:\keycloak-18.0.0>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-…

Wince NK.BIN文件格式

nk.bin文件格式 开始7个字节为 42 30 30 30 46 46 0A 即“B000FF\x0A”&#xff0c;以次来判别文件类型。 接下来4字节&#xff08;DWORD&#xff09;表示ImageStart, 4字节表示ImageLength 如7字节后的8字节分别为&#xff1a;00 00 00 60 9C FA 33 01 则表示ImageStart0x600…

【SpringBoot3.x教程05】SpringBoot与关系型数据库的整合

前言&#xff1a;常用的ORM框架有哪些 JdbcTemplate JdbcTemplate 是Spring框架提供的一个JDBC抽象库&#xff0c;旨在简化传统的JDBC操作&#xff0c;避免了繁琐的JDBC代码和数据库资源的手动处理。通过JdbcTemplate&#xff0c;开发者可以更加专注于业务逻辑而不是数据库的连…

【网站项目】308学生档案管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

如何用Python3自撰一个简单的后端框架

不使用任何现有的后端框架来创建一个Python 3的后端框架是一个相当复杂的任务,因为它涉及到许多Web开发的基础知识,比如HTTP协议处理、路由、中间件、请求和响应处理等。然而,我们可以从最基本的概念开始,逐步构建一个简单的后端框架。 以下是一个非常基础的指南,用于创建…

Spring Webflux 详解

目录 0、组件对比 1、WebFlux 1、引入 2、Reactor Core 1、HttpHandler、HttpServer 3、DispatcherHandler 1、请求处理流程 4、注解开发 1、目标方法传参 2.返回值写法 5、文件上传 6、错误处理 7、RequestContext 8、自定义Flux配置 9、Filter WebFlux&am…

2024武汉国际氢能源与燃料电池展将在8月盛大开幕!

2024武汉国际氢能源及燃料电池产业博览会 同期举办&#xff1a;2024世界汽车制造技术暨智能装备博览会 时间&#xff1a;2024.8.14-16 地点&#xff1a;武汉国际博览中心 邀请函 主办单位&#xff1a; 湖北省汽车行业协会 湖北省机械行业联合会 湖北省汽车产业技术创新联…

查找数组元素相同的最后一组数组的第一个下标

题目 面试过程中&#xff0c;被问到这道面试题&#xff0c;做个记录&#xff1a; 有一组数组x&#xff1a; x{“11”,”aa”} 要比较的数组y是&#xff1a; y{“11”,”aa”,“11”,”aa”} y1{“11”,”aa”,“11”,”res”,”aa”} y2 {“11”,”11”,“11”,”aa”} 需…

为树莓派5编译Android14源码

为树莓派5编译Android14源码 1. 软硬件要求 官方推荐配置: https://source.android.google.cn/docs/setup/start/requirements?hl=zh-cn ubuntu22.04 虚拟机内存最低 16GB磁盘最低 360GB2. 安装依赖工具 官方文档:https://source.android.google.cn/docs/setup/start/init…

jieba模块中文分词应用场景案例

jieba 是一个在 Python 中广泛使用的中文分词库。由于其高效、准确和易用&#xff0c;jieba 在自然语言处理领域有着广泛的应用。下面我将通过一个简单的案例来展示 jieba 在中文分词中的应用场景。 案例&#xff1a;文本分类 假设我们有一个简单的文本分类任务&#xff0c;需…