Translate C++ Dijkstra to Javascript version

react-native源码系列三 native c++代码到js代码 上篇文章追踪runApplication函数到c++层,这篇文章分析一下c++与js的通信代码。 基础知识 Android系统加载JNI Lib的方法    Android系统加载JNI Lib的方法有如下两种:   1) 通过JNI_OnLoad   2) 如果JNI Lib没有定义JNI_OnLoad,则dvm调用dvmResolveNativeMethod进行动态 阅读详情

The C++ Dijkstra is at:

http://www.cnblogs.com/tanky_woo/archive/2011/01/19/1939041.html

Calculate the path from 1 to 5!



Here is the Javascript version which is translated from above version:

<script type="text/javascript">
 
	var maxnum = 100;
	var maxint = 999999;
	 
	function Dijkstra(n, v, dist, prev, c)
	{
		var s = [];    // 判断是否已存入该点到S集合中
		for(var i=0; i<n; i++)
		{
			dist[i] = c[v][i];
			s[i] = 0;     // 初始都未用过该点
			if(dist[i] == maxint)
				prev[i] = 0;
			else
				prev[i] = v;
		}

		dist[v] = 0;
		s[v] = 1;
	 
		// 依次将未放入S集合的结点中,取dist[]最小值的结点,放入结合S中
		// 一旦S包含了所有V中顶点,dist就记录了从源点到所有其他顶点之间的最短路径长度
		for(var i=1; i<n; i++)
		{
			var tmp = maxint;
			var u = v;
			// 找出当前未使用的点j的dist[j]最小值
			for(var j=0; j<n; j++) {
				if((!s[j]) && dist[j]<tmp)
				{
					u = j;              // u保存当前邻接点中距离最小的点的号码
					tmp = dist[j];
				}
			}
			s[u] = 1;    // 表示u点已存入S集合中
	 
			// 更新dist
			for(var j=0; j<n; j++) {
				if((!s[j]) && c[u][j]<maxint)
				{
					var newdist = dist[u] + c[u][j];
					if(newdist < dist[j])
					{
						dist[j] = newdist;
						prev[j] = u;
					}
				}
			}
		}
	}
	 
	function searchPath(prev, v, u)
	{
		var que = [];
		var tot = 0;
		que[tot] = u;
		tot++;
		var tmp = prev[u];
		while(tmp != v)
		{
			que[tot] = tmp;
			tot++;
			tmp = prev[tmp];
		}
		que[tot] = v;
		var result = "";
		for(var i=tot; i>=0; --i) {
			if(i != 0) {
				result += que[i] + " -> ";
			} else {
				result += que[i];
			}
		}
		alert("源点到最后一个顶点的路径为: \n" + result);
	}
	 
	function main()
	{
		// 各数组都从下标1开始
		var dist = [];     // 表示当前点到源点的最短路径长度
		var prev = [];     // 记录当前点的前一个结点
		var c = [];   // 记录图的两点间路径长度
		var n, line;             // 图的结点数和路径数
	 
		// 输入结点数
		n = 5;
		// 输入路径数
		line = 7;

		// 初始化c[]为maxint
		for(var i=0; i<n; i++) {
			c[i] = [];
			for(var j=0; j<n; j++) {
				c[i][j] = maxint;
			}
		}
	 
		c[0][1] = 10;
		c[1][0] = 10;
		c[0][3] = 30;
		c[3][0] = 30;
		c[0][4] = 100;
		c[4][0] = 100;
		c[1][2] = 50;
		c[2][1] = 50;
		c[2][4] = 10;
		c[4][2] = 10;
		c[3][2] = 20;
		c[2][3] = 20;
		c[3][4] = 60;
		c[4][3] = 60;
	 
		for(var i=0; i<n; i++)
			dist[i] = maxint;
		var node = "顶点位置: \n";
		for(var i=0; i<n; i++)
		{
			for(var j=0; j<n; j++) {
				node += c[i][j] + "\t";
			}
			node += "\n";
		}
		alert(node);
		
		Dijkstra(n, 0, dist, prev, c);

		// 最短路径长度
		alert("源点到最后一个顶点的最短路径长度: \n" + dist[n-1]);
		// 路径
		searchPath(prev, 0, n-1);
	}
	main();
</script>






AI工程实践指南:从Newsletter到可复现的AI基建决策系统 在AI技术快速迭代的背景下,工程师亟需一种兼顾时效性、可验证性与工程落地性的知识获取方式。AI newsletter作为一种轻量级知识操作系统,其核心价值在于将碎片化工具信息升维为结构化决策依据——通过最小可行测试(MVP Test)保障可用性,结合API调用成本与延迟实测实现量化选型,并依托可复现性等级(✅/⚠️/❌)控制技术引入风险。这类实践导向的内容形态,本质上是面向LLM应用开发、RAG系统优化、本地模型微调等真实场景的技术校准机制,尤其适用于需要在有限算力(如M2 Mac)、明确SLA(如P99< 阅读详情

相关推荐

从C++转成JS的那些事

前言JS的一些硬伤与尝试是编译还是解释变量是动态还是静态asm.jswasmLLVM编译过程与LLVM关于两种编译器和的小历史顺带了解一下的ASTWebAssemblyEmscripten记录下emscripten的安装过程构建系统工具对wasm的支持V8引擎nodeJS 前言 最近接触到了不少前端的技术,作为一个老的C++程序员,了解到竟然可以把C++代码直接编译成JS在前端运行感觉到不可思议,于是就跳入了这个大坑。 从我这个老的C++程序员的理解顺序来说,我是从如下几个方面去了解整个webas

新兴IT民工的专栏 4192

c++string 加引号_一日一技:python中的string.translate()方法

python学习string.translate()方法translate()方法返回一个字符串,其中每个字符都映射到转换表中的相应字符。translate()方法使用转换表来根据映射表替换/转换给定字符串中的字符。转换表是通过静态方法maketrans()创建的。translate()方法的语法为:string.translate(table)translate()参数translate()方法...

weixin_39738416的博客 246

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1388

C++ 与 JavaScript 互操作

C++ 与 JavaScript 互操作cheungmine2007-4-8——伎俩和技巧—— 我们不需要自己创建脚本引擎,就可以使我们的程序能以最灵活的方式处理JS脚本。我们经常遇到的情况是:从JavaScript脚本中调用C++对象,解决方法是把C++对象写成COM组件,然后在IE中使用这个组件,如下面的例子:                     M

恒 5287

【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计01 基础知识

CPU:拥有 L1/L2/L3 多级缓存,用于暂存即将执行的指令和频繁访问的数据。GPU:包含显存、纹理缓存、常量缓存、指令缓存等,加速图形渲染和通用计算。RAID 卡 / 存储控制器:自带缓存(通常带电池保护),用于合并写操作、加速读写。打印机:内置内存缓存,用于暂存待打印的页面数据,避免反复从电脑传输。光驱 / 蓝光播放器:内部缓存用于平滑读取光盘数据,防止因寻道延迟导致卡顿。操作系统:页缓存(Page Cache):缓存文件系统数据,减少磁盘 I/O。目录缓存(dentry cache):加速路径查找

weixin_49199313的博客 290

Camera AF和FF

Camera按对焦功能可以分为FF(Fixed Focus)和AF(Auto Focus),即固定对焦和自动对焦。固定对焦顾名思义就是焦距是固定的,而自动对焦可以通过移动镜头位置来改变焦距从而实现自动对焦。以前摄像的功能机大多是固定对焦,现在的手机都带有自动对焦功能。 FF模组包括镜头(Lens),传感器(Sensor),红外滤色器(IR Filter),电路板(PCB),镜头支撑(Lens Holder),连接器(Connector)。 Fig 1. FF Module AF模组包括FF模组,音圈马达(V

Coppa的博客 1万+

像C++一样写JavaScript

像C++一样写JavaScript C/C++/Java的include或import可以引用第3方文件和包. 这个功能在Html/Js里没有默认的实现. 假设我们有这样一个HTML文件index.html: &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1...

923723914 268

PX4无人机实战:手把手教你用MAVROS实现Offboard模式(附避坑指南)

本文提供了一份详尽的PX4无人机Offboard模式实战指南,重点解析了如何通过MAVROS实现从仿真到实机的控制。内容涵盖硬件连接、串口权限设置、MAVROS配置、核心代码编写以及实机操作全流程,并附有详细的避坑指南和故障排查手册,帮助开发者快速掌握ROS与PX4飞控的集成开发。

weixin_29172201的博客 267

基于QT C++的校园导览系统开发:从UI设计到A*路径规划

桌面应用程序开发是软件工程实践中的重要领域,它涉及用户界面设计、业务逻辑处理与数据管理的综合集成。其核心原理在于通过框架提供的组件与事件驱动模型,构建出直观、响应迅速的用户交互体验。在技术价值上,一个设计良好的桌面应用不仅能提升特定场景下的工作效率,其开发过程本身也是深入理解操作系统交互、内存管理及算法应用的绝佳途径。典型的应用场景包括办公自动化工具、图形图像处理软件以及各类信息管理系统。本文以校园导览系统为例,具体阐述了如何利用QT框架的图形视图架构和C++的高效计算能力,实现地图渲染、数据管理及A*路径

weixin_30457551的博客 625

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5338

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1257

取得文章中的URL地址~

最好的办法就是使用正则表达式来比配获得~ [CODE] function getUrl(){ var str = document.all.stefli.value; var re = /http:////([/w-]+/.)+[/w-]+(//[/w- .//?%&=]*)?/gi; var len = str.match(re).length; for(var i=0;i {  alert(s

^_^-Beluga, ^_^-Stefli 2385

让 ABAP Screen Variant 安稳上车:SHD0 与 SHD0_MANDT 的 Transport 全攻略

摘要: SAP项目常需优化交易码界面,通过SHD0的Transaction Variant和Screen Variant可实现字段精简、默认值预设及权限控制,避免修改标准代码。但跨系统迁移时易出现变式丢失或版本兼容问题。核心概念包括: Screen Variant:针对单个屏幕的字段属性配置(跨Client); Transaction Variant:串联多屏幕变式(分跨Client和Client-specific); 版本差异:4.70/6.x后需区分SHD0(跨Client)与SHD0_MANDT(Cl

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 226

Three linkage menu for Province, City, County

To load adzone faster, we need to use ajax to load the province, city or county when its parent changed.Here is the major code:1. Main page<%@ page language="java" contentType="text/html; chars

^_^-Beluga, ^_^-Stefli 2015

[工作流节点10] 获取多条数据并循环执行 —— 明道云批处理自动化实战

本文系统介绍了明道云工作流中"获取多条数据+循环执行"的批处理功能。该功能通过筛选数据集合并逐条处理,适用于批量通知、数据更新等场景。文章详细解析了功能配置方法,包括数据筛选、循环设置和异常处理,并提供了合同到期提醒等典型应用案例。同时强调了数据量控制、分批处理、错误处理等优化策略,帮助用户实现高效批量自动化。这一功能组合能将业务从单条处理升级为批量驱动,显著提升工作效率。

每日出拳老爷子的博客 455

【温室气体】GOSAT 数据产品

【温室气体】GOSAT 数据产品

WW、forever的博客 238

JAVASCRIPT加密解密终级指南

    本文一共介绍了七种方法:    一:最简单的加密解密    二:转义字符"/"的妙用    三:使用Microsoft出品的脚本编码器Script Encoder来进行编码     (自创简单解码)    四:任意添加NUL空字符(十六进制00H)     (自创)    五:无用内容混乱以及换行空格TAB大法    六:自写解密函数法    七:错误的利用                

^_^-Beluga, ^_^-Stefli 1802

【OpenCV C++】基本绘图操作

OpenCV C++基本绘图操作程序说明代码运行效果 程序说明 // 程序描述:OpenCV C++基本绘图操作 //参 考:毛星云《OpenCV3编程入门》 // 操作系统: Windows 10 64bit // 开发语言: C++ // IDE 版 本:Visual Studio 2019 // OpenCV版本:4.20 代码 main函数写法很简单,先创建空表Mat图像,然后点用函数绘制化学原子图,接着绘制组合图,最后显示图像。 //-------------------------

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 765

横向菜单和竖向菜单~

[CODE] function show(obj){eval("menu"+obj).style.visibility="visible";} function hidden(obj){eval("menu"+obj).style.visibility="hidden";}//--> 竖向菜单 网页设计 图象处理 超酷源码 作品展示 给我留言 酷设网v1

^_^-Beluga, ^_^-Stefli 1665

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JQuery-Rolling effect

$(html,body).animate({scrollTop: 20}, 1000); its perfect!

^_^-Beluga, ^_^-Stefli 1581

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Display the google map in jQuery ui dialog

Use the default settings, the google map can be displayed in a separate page. But, cant be displayed in the jQuery dialog. After debug in Firebug, i found that the major javascripts are never be load

^_^-Beluga, ^_^-Stefli 1324

(js)数值转人民币大写的程序!--我也来个

看了“zhaoxiaoyang (梅雪香) ”写的,我也手痒咯,就写了一个玩玩,程序比他少点而已~//-----------------------------------------------------------------------////---Editor:Stefli//---QQ:3326848//---WebSite:http://www2.gliet.edu.cn/gdh

^_^-Beluga, ^_^-Stefli 1309

alt的特殊显示方式

//标题处理开始//***********默认设置定义.*********************tPopWait=50;//停留tWait豪秒后显示提示。tPopShow=1000;//显示tShow豪秒后关闭提示showPopStep=20;popOpacity=99;//***************内部变量定义*****************sPop=null;curShow=null;

^_^-Beluga, ^_^-Stefli 1304

常用长宽高~

s  +=  "/r/n网页可见区域宽:"+  document.body.clientWidth;  s  +=  "/r/n网页可见区域高:"+  document.body.clientHeight;  s  +=  "/r/n网页可见区域高:"+  document.body.offsetWeight  +"  (包括边线的宽)";  s  +=  "/r/n网页可见区域高:"+  doc

^_^-Beluga, ^_^-Stefli 1303

文章中的代码演示功能~

对于学习js有很大的帮助 [CODE] function Run() { var str = document.all.stefli.value; var re = /(/[STEFLICODE])(.[^/[]+)(/[//STEFLICODE])/i;  var html = str.replace(re,"$2"); var obj = window.open("","_blank","")

^_^-Beluga, ^_^-Stefli 1135
上一篇: Set wlan for mobile devices in Wn7
stefli
博客等级 码龄24年 203粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值