[已答复] matlab搜索图中任意两点间所有路径的matlab程序

[复制链接]
andyjieke 发表于 2012-11-5 22:04:19
function possiablePaths = findPath(Graph, partialPath, destination, partialWeight)
% findPath按深度优先搜索所有可能的从partialPath出发到destination的路径,这些路径中不包含环路
% Graph: 路网图,非无穷或0表示两节点之间直接连通,矩阵值就为路网权值
% partialPath: 出发的路径,如果partialPath就一个数,表示这个就是起始点
% destination: 目标节点
% partialWeight: partialPath的权值,当partialPath为一个数时,partialWeight为0
pathLength = length(partialPath);
lastNode = partialPath(pathLength); %得到最后一个节点
nextNodes = find(0<Graph(lastNode,:) & Graph(lastNode,:)<inf); %根据Graph图得到最后一个节点的下一个节点
GLength = length(Graph);
possiablePaths = [];
if lastNode == destination
% 如果lastNode与目标节点相等,则说明partialPath就是从其出发到目标节点的路径,结果只有这一个,直接返回
possiablePaths = partialPath;
possiablePaths(GLength + 1) = partialWeight;
return;
elseif length( find( partialPath == destination ) ) ~= 0
return;
end
%nextNodes中的数一定大于0,所以为了让nextNodes(i)去掉,先将其赋值为0
for i=1:length(nextNodes)
if destination == nextNodes(i)
  %输出路径
  tmpPath = cat(2, partialPath, destination);      %串接成一条完整的路径
  tmpPath(GLength + 1) = partialWeight + Graph(lastNode, destination); %延长数组长度至GLength+1, 最后一个元素用于存放该路径的总路阻
  possiablePaths( length(possiablePaths) + 1 , : ) = tmpPath;
  nextNodes(i) = 0;
elseif length( find( partialPath == nextNodes(i) ) ) ~= 0
  nextNodes(i) = 0;
end
end
nextNodes = nextNodes(nextNodes ~= 0); %将nextNodes中为0的值去掉,因为下一个节点可能已经遍历过或者它就是目标节点
for i=1:length(nextNodes)
tmpPath = cat(2, partialPath, nextNodes(i));
tmpPsbPaths = findPath(Graph, tmpPath, destination, partialWeight + Graph(lastNode, nextNodes(i)));
possiablePaths = cat(1, possiablePaths, tmpPsbPaths);
end
%输入桐乡到富阳的高速公路网络图的边权矩阵
a=[0,62,66,inf,inf,inf,inf;
      62,0,inf,25,11,inf,inf;
      66,inf,0,9,inf,inf,49;
      inf,25,9,0,11,14,inf;
      inf,11,inf,11,0,13,inf;
      inf,inf,inf,14,13,0,35.8;
      inf,inf,49,inf,inf,35.8,0;];
%调用搜索图中任意两点间所有路径的M文件
findPath(a, 1, 7, 0)

这代码run不出结果 为什么????

16 条回复


math 发表于 2012-11-6 06:44:39
为了他人能尽快帮助你,我已经简单修改了你的帖子,希望你以后发帖时注意查看发帖帮助:


math 发表于 2012-11-6 06:45:46
直接给出你的错误信息,或者使用最短代码-错误重现的方式来提问,没有多少人有时间帮你debug程序,尤其是函数,因为我们根本就没有函数所需要的输入参数来测试。

黑小虎 发表于 2012-11-15 17:32:27
我也在网上下载了这个程序,跟楼主一样的结果,他那个程序运行不报错,就是不出来结果啊。。

zeroyuanyu 发表于 2013-3-13 11:49:56
楼上各位解决了吗?
我最近也要做这个,也出现问题了,我运行程序还报错呢。。
错误信息:
Error using findPath (line 7)
Not enough input arguments.

楼上解决了的话,麻烦告知下~

zeroyuanyu 发表于 2013-3-13 12:09:51
Maximum recursion limit of 500 reached. Use
set(0,'RecursionLimit',N)
to change the limit.  Be aware that exceeding your available stack
space can
crash MATLAB and/or your computer.

错误信息。。   把N设置成1000都会崩溃,现在降低到5个点了,还是不行

Tony9006 发表于 2013-11-11 11:24:02
可以用的啊 有输出结果的 先把最后的矩阵a在命令行输入 然后调用函数findPath(a, 1, 7, 0)就可以了啊  把函数中最后定义的矩阵和调用的函数先注释掉

减字木兰珍 发表于 2014-3-11 09:40:49
不知道楼主解决没~这个程序是好用的~

hustzyr 发表于 2015-1-4 15:30:38
程序可以用的,谢谢哈

huyaoyao 发表于 2015-1-15 14:56:00
还是 不会用啊

mimi94 发表于 2015-5-2 19:56:53
??? Maximum recursion limit of 500 reached. Use
set(0,'RecursionLimit',N)
to change the limit.  Be aware that exceeding your available
stack space can
crash MATLAB and/or your computer.

Error in ==> findPath
报错信息是这个,好奇怪,我建立了一个新的m文件,引用选路函数:
clc
clear all
%输入桐乡到富阳的高速公路网络图的边权矩阵
    a=[0,62,66,inf,inf,inf,inf;
      62,0,inf,25,11,inf,inf;
      66,inf,0,9,inf,inf,49;
      inf,25,9,0,11,14,inf;
      inf,11,inf,11,0,13,inf;
      inf,inf,inf,14,13,0,35.8;
      inf,inf,49,inf,inf,35.8,0;];
%调用搜索图中任意两点间所有路径的M文件
findPath(a, 1, 6, 0)
为什么还是不行,求指导

纪梵希 发表于 2015-7-28 16:03:35
太感谢了,终于弄好了!这个程序牛逼

chenxxx 发表于 2016-4-20 16:22:23
纪梵希 发表于 2015-7-28 16:03
太感谢了,终于弄好了!这个程序牛逼

怎么做到的,可不可以具体说说

chenxxx 发表于 2016-4-20 16:26:36
chenxxx 发表于 2016-4-20 16:22
怎么做到的,可不可以具体说说

做到了  能不能说说说输出的数据怎么看啊

甜软奶喘 发表于 2019-8-25 11:04:31
>> main
输入参数的数目不足
为什么会这样

张荣辉 发表于 2019-10-31 13:19:07
chenxxx 发表于 2016-4-20 16:26
做到了  能不能说说说输出的数据怎么看啊

您好,请问输出数据怎么看

markfang2046 发表于 2019-11-7 10:01:46
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表