最近老板让计算最短路径及路径个数,找遍了所有工具箱,都没现成的。急死了,什么Dijkstra和Floyd都搞不定。最后,想了想,算了吧,自己编吧,反正自己用,又没有算法复杂度要求。于是自己就写了个小程序(本程序仅限无权无向连通图),算法复杂度不晓得()。
本人不是计算机出身,就不写算法步骤了,直接上图解。
我们首先计算的是节点1到所有节点的最短路径,及个数。s存放节点1到所有节点的最短路径,p_num存放路径的个数。
初始化:s=[0,0,0,0,0,0,0] p_num=[1,0,0,0,0,0,0]
第一轮迭代:找节点1的所有邻居节点2,3,4。则:s([2,3,4])=1
在看节点2的邻居1和5.则: p_num(2)= p_num(1)+ p_num(5)=1+0=1
同理:p_num(3)=p_num(4)=1
则本轮会得到:s=[0,1,1,1,0,0,0] p_num=[1,1,1,1,0,0,0]
第二轮迭代:找节点2,3,4的所有邻居节点(没有被找过的节点)5,6。则:s([5,6])=2
再看节点5的邻居2,3和7.则: p_num(5)= p_num(2)+ p_num(3)+ p_num(7)=1+1+0=2
同理:p_num(6)=1
则本轮会得到:s=[0,1,1,1,2,2,0] p_num=[1,1,1,1,2,1,0]
第三轮迭代:找节点5,6的所有邻居节点(没有被找过的节点)7。则:s([7])=3
在看节点7的邻居5和6.则: p_num(2)= p_num(5)+ p_num(6)=2+1=3
则本轮会得到:s=[0,1,1,1,2,2,3] p_num=[1,1,1,1,2,1,3]
找节点7的所有邻居节点(没有被找过的节点),没啦,迭代终止。哈哈节点到所有节点的最短路径及条数搞定,然后来个循环就把任意两个点的最短路径及个数搞定。
哇嘎嘎,简单粗暴,下面有程序,能力有限。使用前记得要仔细拍错误哦哦