图论:matlab程序求任两顶点经过另外一固定点最短路径的条数

图论:matlab程序求任两顶点经过另外一固定点最短路径的条数,第1张

1、首先根据赋并搭权的邻接矩阵(不相邻点之间的权是inf)求出距离矩阵

程序如下:(是函数形式的)

function d=juli(a)

[p,r]=size(a)

for k=1:p

for m=1:p

for n=1:p

if(a(m,n)>a(m,k)+a(k,n))

a(m,n)=a(m,k)+a(k,n)

end

end

end

end

d=a

2、根据距离矩阵求出任两点经过该点的最短距绝裂拿离,用矩阵表示

程序如下(输入是距离矩阵和顶点编号)

function d1=jingguo(d,s)

d1=d

[m,n]=size(d)

for x=1:m

for y=1:m

d1(x,y)=d(x,s)+d(s,y)

d1(y,x)=d(x,s)+d(s,y)

end

end

怎么调用函数这些你知道吧,源让不知道再问我吧

你的代码我自己重新写了一遍,字母换了但字母顺序没有换

你的问题在于出现了重复累加的情况,举例:

显而易见3条路,原代码计算结果为5,因为(k1,k2,k)在(1,7,5),(1,5,2),(1,5,3),(1,7,6),(1,6,4)的时候各增加了一次可以看出多增加了两次(因为1257和1467这条两路在第二轮判断时各多加了一次),实际上每次处理过循环之后,都会多加一次,因此我加入判断变量k0,只要循环巧悄中内经过递归,那么结束时就会减一(如k1=1,k2=5时,实际上此时已经加过一次,在k=2,3时又加了两次,此时就需要减掉一次)

感谢题主的思孝山路,手头在做介数中心性,之前一直在考虑生成所有最短路径的矩阵,但计算规模巨大,远不运樱如这种方法简单

function n=fun2(k1,k2,G,D)

%求最短路径数目

%k1表示第一个点,k2表示第二个点,D表示距离矩阵

  num=size(G,1)

  n=0

  k0=false

  for k = 1:num

      if G(k,k2)&&D(k1,k2)==D(k1,k)+D(k,k2)%如果第k个点直接连通到k2且为k1,k2必经之点,则进入递归

          n = n + fun2(k1,k,G,D)

          k0=true                         %如果循环内出现了递归则记为true

      end

  end

  if k0,n=n-1end  %排除重复增加

  n=n+1

end

运行:

G=[false,true,true,true,false,false,falsetrue,false,false,false,true,false,falsetrue,false,false,false,true,false,falsetrue,false,false,false,false,true,falsefalse,true,true,false,false,false,truefalse,false,false,true,false,false,truefalse,false,false,false,true,true,false]

k1=1k2=7

D=[NaN,1,1,1,2,2,31,NaN,2,2,1,3,21,2,NaN,2,1,3,21,2,2,NaN,3,1,22,1,1,3,NaN,2,12,3,3,1,2,NaN,13,2,2,2,1,1,NaN]

n=fun2(k1,k2,G,D)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12309587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存