首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过php从mysql db计算两个"位置"之间的最短路径

通过PHP从MySQL数据库计算两个"位置"之间的最短路径,可以使用Dijkstra算法或A*算法。这里我们使用Dijkstra算法作为示例。

首先,需要在MySQL数据库中存储位置之间的距离信息。可以创建一个名为locations的表来存储位置信息,另一个名为distances的表来存储位置之间的距离信息。

locations表结构如下:

代码语言:txt
复制
CREATE TABLE locations (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL
);

distances表结构如下:

代码语言:txt
复制
CREATE TABLE distances (
  from_id INT NOT NULL,
  to_id INT NOT NULL,
  distance FLOAT NOT NULL,
  PRIMARY KEY (from_id, to_id),
  FOREIGN KEY (from_id) REFERENCES locations(id),
  FOREIGN KEY (to_id) REFERENCES locations(id)
);

接下来,可以使用PHP从MySQL数据库中获取位置信息和距离信息,并使用Dijkstra算法计算最短路径。以下是一个简单的示例代码:

代码语言:php
复制
<?php
// 连接MySQL数据库
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

// 获取所有位置信息
$locations = [];
$result = $mysqli->query('SELECT * FROM locations');
while ($row = $result->fetch_assoc()) {
  $locations[$row['id']] = $row['name'];
}

// 获取所有距离信息
$distances = [];
$result = $mysqli->query('SELECT * FROM distances');
while ($row = $result->fetch_assoc()) {
  $distances[$row['from_id']][$row['to_id']] = $row['distance'];
}

// 计算两个位置之间的最短路径
function dijkstra($distances, $start, $end) {
  $visited = [];
  $unvisited = [];
  $previous = [];
  $path = [];

  foreach ($distances as $id => $distance) {
    $unvisited[$id] = INF;
  }

  $unvisited[$start] = 0;

  while (!empty($unvisited)) {
    $current = array_search(min($unvisited), $unvisited);
    $visited[$current] = $unvisited[$current];
    unset($unvisited[$current]);

    foreach ($distances[$current] as $id => $distance) {
      if (isset($visited[$id])) {
        continue;
      }

      $new_distance = $visited[$current] + $distance;

      if ($new_distance < $unvisited[$id]) {
        $unvisited[$id] = $new_distance;
        $previous[$id] = $current;
      }
    }
  }

  $current = $end;
  while ($current != $start) {
    array_unshift($path, $current);
    $current = $previous[$current];
  }
  array_unshift($path, $start);

  return $path;
}

// 示例:计算位置A和位置B之间的最短路径
$start = 1; // 位置A的ID
$end = 4; // 位置B的ID
$path = dijkstra($distances, $start, $end);

// 输出结果
echo "最短路径:\n";
foreach ($path as $id) {
  echo $locations[$id] . "\n";
}

这个示例代码中,我们使用了Dijkstra算法来计算两个位置之间的最短路径。具体来说,我们首先获取所有位置信息和距离信息,然后使用Dijkstra算法计算最短路径。最后,我们输出计算结果。

需要注意的是,这个示例代码仅供参考,实际应用中可能需要根据具体情况进行修改和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL和PostgreSQL在多表连接算法上差异

因为在多表连接时,每两个之间连接具有一个代价值,优化器会根据代价估算调整不同表join顺序,最后算出一个最优或者近似最优代价,使用这个代价生成执行计划,这样就涉及到图论中最短路径问题,不同连接顺序组合代表了图遍历...,最优代价其实就是求无源图最短路径问题。...我们知道两种主流最短路径算法是迪杰斯特拉(Dijkstra)算法和弗洛伊德(floyd)算法,这两种算法也是动态规划中经典算法。 在mysql计算最优代价使用贪心算法,而pg使用是动态规划。...Postgresql: 再来看看pg使用动态规划,动态规划解决是无源最短路径问题,我们想象一下其实多表连接本身就是一个无源最短路径问题,只是mysql在进行连接时候随机选了一个作为起点而已。...弗洛伊德算法使用矩阵记录节点直接距离,它强大之处在于它经过若干次计算后得到任意两个节点直接最短距离,是真正意义上无源最短路径算法,但是它算法复杂度也比较高,是O(n³)。

2.2K20

BloodHound

工具简介 BloodHound是一个免费域渗透分析工具,BloodHound以用图与线形式将域内用户、计算机、组、 会话、ACL 及域内所有相关用户、组、计算机、登录信息、访问控制策略之间关系直观地展现在...在数据库信息栏,可以显示所分析域用户数量、计算机数量、组数量、会话数量、ACL 数量、关系。还可以在此处执行基本DB管理功能,包括注销和切换DB,以及清除当前加载DB。...具有外部域组成员身份用户。 具有外部域组成员身份组。 映射域信任。 无约束委托系统最短路径 KerberoAstable 用户获得最短路径。... KerberoAstable 用户到域管理员最短路径。 拥有主体最短路径所属主体到域管理员最短路径。 高价值目标的最短路径。...将找到所有从起始节点到目标节点之间最短路径,然后在图形绘制区域显示具体路径,如下图所示: ?

1K10
  • 如何保护Wp-Config.Php文件

    使用 FTPES SFTP 来加密计算机和服务器之间通信非常重要。如何保护wp-config.php文件  使用记事本等文本编辑器打开 .htaccess 文件。...通常,wp-config.php 文件通过将其上移一层从而将其置于您网站公共文件夹之外来保护。所以最好选择是向上移动并在您网站目录中一个未公开位置。...phpdefine('DB_NAME', 'Your_DB'); // name of databasedefine('DB_USER', 'DB_User'); // MySQL userdefine...('DB_PASSWORD', 'DB_pass'); // and passworddefine('DB_HOST', 'localhost'); // MySQL host// The WordPress...请注意,包含路径(即 /home/yourname/)因网络服务器或网络托管提供商而异。如果您不确定您网站绝对路径是什么,请参考博主提示如何使用 PHP 在网络服务器上查找绝对路径

    1.2K30

    C++ 不知算法系列之深入动态规划算法思想

    动态规划算法最大特点,原始问题可以通过分解成规模更小子问题来解决,子问题之间互成依赖关系,也就是先计算出来子问题结果会影响到后续子问题结果。...案例 2.1 最短路径 2.1.1 问题描述 求解如下有向权重图中A城市到E城市之间最短路程。城市与城市之间连接线上数字表示城市之间路程。...并且把任一结点到E结点最短路程存储在一维数组中(也称为 db 数组)。 D层到E是直达,权重值即是最小值,可以直接存储。 C层到E层路程计算原则。...如 C5到E结点可以通过中间结点D8、D9到达,即有 2 条可行路径。 如计算 C5~D8~……E路程值:C2到D8权重加上D8到E 最小路程值(可以db数组中获取)。即:3+1。...通过上述分析可知,f(v)=min( w(v,v1)+db(v1), w(v,v2)+db(v2),…… )。 问题域本身也有 2 个信息: 结点数据。 结点之间关系数据。

    48010

    如何在Ubuntu 16.04上使用Deployer自动部署Laravel应用程序

    Deployer通过将应用程序Git存储库克隆到服务器,使用Composer安装依赖项以及配置应用程序以使您不必手动执行此操作来自动执行部署。这使您可以将更多时间用于开发,而不是上载和配置。...Git服务器之间连接: $ ssh -T git@mygitserver.com 最后,退出服务器: $ exit 我们可以继续在我们Web服务器上配置Nginx和MySQL。...在current/public根目录路径链接指向应用程序最新版本。通过添加index指令,我们告诉Nginx index.php在请求目录位置之前首先查找文件,然后再查找它们HTML副本。...=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_database DB_USERNAME=laravel_user DB_PASSWORD...结论 通过本教程,您已将本地计算机和服务器轻松部署了Laravel应用程序,本文仅介绍Deployer基础知识,它有许多有用功能。

    15.6K10

    PHP全栈学习笔记23

    php工作流程,PHP基于服务器端运行脚本程序语言,实现数据库和网页之间数据交互。 操纵系统,网站运行服务器所使用操作系统。 服务器,搭建PHP运行环境时所选择服务器。...PHP代码,到PHP包对实现PHP文件进行解析和编译,服务器搭建PHP运行环境时所选择服务器,所需操作系统,数据库系统,通过PHP包解析后代码发送给用户。...函数库 mysql_close 关闭mysql连接 mysql_connect 打开一个mysql服务器连接 mysql_create_db 创建一个数据库 mysql_error 文本错误信息...mysql_fetch_object 结果集中获取一行作为对象 mysql_fetch_row 结果集中获取一行作为枚举数组 mysql_num_rows 获取结果集中行数目 mysql_query...php $link = mysql_connect("localhost", "root", "root"); // 连接数据库 mysql_selected_db("db_database"); if

    3.7K30

    【WEB安全】PHPMyAdmin后台GetShell姿势总结

    该字段内容无法通过sql语句修改,需要修改mysql配置文件my.ini secure_file_priv=null 不允许文件导入导出 secure_file_priv=xxx 文件导入导出到某路径...secure_file_priv= 文件可导入到任意路径 可以通过页面报错、php探针等手段获取到网站服务绝对路径后,执行下面的sql语句即可将webshell写入。...利用条件 数据库root权限 获得网站绝对路径 利用方式 执行下面的sql语句查询MySQL是否开启了全局日志以及全局日志存放位置。...因为mysql表单都是以文件形式存储在计算机上,所以可以通过phpMyAdmin来创建一个数据表,其某字段为一句话木马。通过漏洞包含这个文件即可getshell。...php @eval($_GET['cmd']);?>` INT); 查询数据库表文件存放位置,在windows中表文件后缀为.frm,文件路径为date/数据库名/表名.frm。

    59410

    CentOS 搭建Cacti监控以及常见故障解决方案

    ) -A INPUT -m state --state NEW -m tcp -p tcp--dport 3306 -j ACCEPT(允许3306端口通过防火墙) 特别提示:很多哥们把这两条规则添加到防火墙配置最后一行.... chown -Rmysql.mysql data 第六步:生成新mysql授权表 //利用mysql_install_db脚本生成新mysql授权表 cd/usr/local/webserver...#MySQL程序安装路径 datadir =/usr/local/webserver/mysql/data#MySQl数据库存放目录 service mysqldstart#启动 第八步:mysql服务加入系统环境变量...:source /etc/profile 下面这两行把myslq库文件链接到系统默认位置,这样你在编译类似PHP等软件时可以不用指定mysql库文件地址。...cmd.php脚本,此脚本最短轮询时间为 5 分钟,也就说我们使用cmd.php 是无法将 cacti 轮询时间设置为每分钟轮询一次,因此,我们需要安装额外高效轮询工具Spine #.

    1K20

    centos 搭建cacti监控以及常见故障解决方案

    ) -A INPUT -m state --state NEW -m tcp -p tcp--dport 3306 -j ACCEPT(允许3306端口通过防火墙) 特别提示:很多哥们把这两条规则添加到防火墙配置最后一行.... chown -Rmysql.mysql data 第六步:生成新mysql授权表 //利用mysql_install_db脚本生成新mysql授权表 cd/usr/local/webserver...#MySQL程序安装路径 datadir =/usr/local/webserver/mysql/data#MySQl数据库存放目录 service mysqldstart#启动 第八步:mysql服务加入系统环境变量...:source /etc/profile 下面这两行把myslq库文件链接到系统默认位置,这样你在编译类似PHP等软件时可以不用指定mysql库文件地址。...cmd.php脚本,此脚本最短轮询时间为 5 分钟,也就说我们使用cmd.php 是无法将 cacti 轮询时间设置为每分钟轮询一次,因此,我们需要安装额外高效轮询工具Spine #.

    1.2K10

    用Docker搭建Laravel开发环境

    在这里我们会用到四个容器分别将 PHPMysql、Nginx 放在四个不同容器中,通过compose`将四个应用容器关联到一起组成项目。...,各个服务相互之间使用服务名称引用。...Mysql服务 接下来我们将配置Mysql服务,与上面两个服务有点不一样是,在PHP-FPM和Nginx容器中,我们配置本地电脑文件可以同步到容器中供容器访问,这让我们开发时对文件作更改能够快速在容器中得到反馈加快我们开发过程...客户端会管理创建数据卷在本地电脑上具体存储位置。...ports端口映射中,我们将本地电脑33061端口映射到容器3306端口,这样我们就能通过电脑上数据库工具连接到docker内Mysql了。

    4.4K10

    2018年终总结

    P //最短路径下标数组 D //各点最短路径权值和 求v0到v最短路径P[v] 和 带权长度 D[v] for v=0;v<G.size;v++ final[v]=0 //未知最短路径状态...no 最短路径问题实际例子: 1.路程最短,时间最短,换乘最少,实际地图场景比这些更复杂 2.非网图可以理解为所有边为1网 3.迪杰斯特拉算法是按照路径长度递增次序产生最短路径算法,并不是一下子就求出...v0到v8最短路径,而是一步一步求出他们之间顶点最短路径 ======================================================================...巨坑 某个源点到其余各顶点最短路径问题: 1.人脑是来创造而不是做枯燥复杂计算,那些背圆周率有啥意义 2.迪杰斯特拉算法,思路是:v0,v1,v2,v3,v4,v5 v0到v1到v2 v0到...============== 2018年9月30日 记录: 1.网图和非网图,最短路径含义不同,非网图没有边上权值,指两点之间经过边数最少路径 2.

    2.6K20

    浅谈php安全

    以后我们在脚本编写中,尽量使用绝对路径而不要使用相对路径(否则脚本如果改变位置,代码也要变),而这个绝对路径就来自入口点文件中定义。 当然,在安全性上,一个入口点文件也能隐藏后台地址。...> WWW_ROOT是我在入口点中定义一个常量,如果用户是通过这个页面的绝对路径访问(http://localhost/register.php),我就输出404错误;只有通过入口点访问(http...“代码”是绝对不能让用户接触。 在php中,对于mysql数据库有两个模块,mysql和mysqli,mysqli意思就是mysql improve。...,它就不是一个sql语句了,但是可以通过mysqli预编译功能先把他编译成stmt对象,在后期用户输入账号密码后,用stmt->bind_param将用户输入“数据”绑定到这两个问号位置。...这样,用户输入内容就只能是“数据”,而不可能变成“代码”。 这两个问号限定了“数据”位置,以及sql语句结构。

    1.9K80

    7000 字学习笔记,MySQL 入到放弃

    Auto Crrash safe Recovery)自动故障安全恢复 6、支持热备份 MySQL复制集群原理与实战 MySQL复制有两种方法: 传统方式:基于主库bin-log将日志事件和事件位置复制到库...B-Tree索引驱使存储引擎不再通过全表扫描获取数据,而是索引根节点开始查找,在根节点和中间节点都存放了指向下层节点指针,通过比较节点页值和要查找值可以找到合适指针进入下层子节点,直到最下层叶子节点...MySQL服务器配置插件: 修改php脚本连接MySQLmonitor@localhost用户 修改MySQLsock文件路径 [root@db01 ~]# sed -i '30c $mysql_user...) [root@db01 ~]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost...擅长 MySQL 数据库,曾就职于山东省计算中心(国家超级计算济南中心)云计算部门。现就职于国内MySQL数据库知名厂商。

    69831

    PHP常用函数大全

    strrchr() 函数查找字符串在另一个字符串中最后一次出现位置,并返回位置到字符串结尾所有字符。 strpos() 函数返回字符串在另一个字符串中第一次出现位置。...mysql_stat() 函数返回 MySQL 服务器的当前系统状态。 mysql_select_db() 函数设置活动 MySQL 数据库。...mysql_errno() 函数返回上一个 MySQL 操作中错误信息数字编码。 mysql_db_name() 函数取得 mysql_list_dbs() 调用所返回数据库名。...rewind() 函数将文件指针位置倒回文件开头。 rename() 函数重命名文件或目录。 realpath() 函数返回绝对路径。 readlink() 函数返回符号连接指向目标。...array_count_values() 函数用于统计数组中所有值出现次数。 array_combine() 函数通过合并两个数组来创建一个新数组,其中一个数组是键名,另一个数组值为键值。

    15720

    数据结构 第15讲 一场说走就走旅行——最短路径

    现在要计算源到所有其他各顶点最短路径长度,这里路径长度指路上各边权之和。 如何求源点到其他各点最短路径呢?...集合V−S中所包含顶点到源点最短路径长度待定,称源点出发只经过S中点到达V−S中路径为特殊路径,并用数组dist[]记录当前每个顶点所对应最短特殊路径长度。...一旦S包含了所有顶点,dist[]就是源到所有其他顶点之间最短路径长度。 (1)数据结构。...由此,可求得源点u到图G其余各个顶点最短路径及长度,也可通过数组p[]逆向找到最短路径上经过城市。...由此,可求得源点u到图G其余各个顶点最短路径及长度,也可通过前驱数组p[]逆向找到最短路径上经过城市,如图2-29所示。

    1.8K10

    PHP常用函数大全

    strrchr() 函数查找字符串在另一个字符串中最后一次出现位置,并返回位置到字符串结尾所有字符。 strpos() 函数返回字符串在另一个字符串中第一次出现位置。...mysql_stat() 函数返回 MySQL 服务器的当前系统状态。 mysql_select_db() 函数设置活动 MySQL 数据库。...mysql_errno() 函数返回上一个 MySQL 操作中错误信息数字编码。 mysql_db_name() 函数取得 mysql_list_dbs() 调用所返回数据库名。...rewind() 函数将文件指针位置倒回文件开头。 rename() 函数重命名文件或目录。 realpath() 函数返回绝对路径。 readlink() 函数返回符号连接指向目标。...array_count_values() 函数用于统计数组中所有值出现次数。 array_combine() 函数通过合并两个数组来创建一个新数组,其中一个数组是键名,另一个数组值为键值。

    2.4K20

    MySQL 报错:ERROR 2002 (HY000): Cant connect to local MySQL server through socket

    一、错误现场还原: 下面我们通过三种方式来连接,然后观察提示错误信息: 1、直接使用“mysql”命令,不带主机名参数; 2、使用带了主机名“localhost”参数mysql -h localhost...“/etc/mysql.cnf”路径,未找到相应socket文件,就会引发此错误。...]”选项,并使用这两个选项下“socket”参数值,与“[mysqld]”选项下“socket”参数值,指向socket文件路径完全一致。...解决方案二: 使用“ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock”命令,将正确socket文件位置,软链接到提示错误socket...文件路径位置,即可解决此问题: [root@lam7 opt]# ls /var/lib/mysql/mysql.sock ls: 无法访问/var/lib/mysql/mysql.sock: 没有那个文件或目录

    48.7K20

    PHPExcel_把Excel数据导入数据库PHP

    以后需要使用时候,直接实例化PHPExcel.phpPHPExcel即可使用 wamp启动失败处理方法 控制面板\系统和安全\管理工具\事件查看器\windows日志\应用程序 可以到上面的路径中去查看是否报错信息...时,已经自动创建了第一张sheet了,所以这里第二张sheet开始创建 if($i > 1) { $objPHPExcel ->createSheet();//创建新内置表 } //sheet表索引默认...> 导出结果如下图: 用PHPExcel合并单元格、文字居中、设置字体、背景颜色、边框、单元格内换行、格式控制(电话号码等长字符不以科学计算方式显示) style.php <?.../db.php";//引入mysql操作类文件 require $dir.".../db.php";//引入mysql操作类文件 require $dir."

    7.4K40
    领券