本人在做传感器网络路由方面的课题,遇到的问题是想找出加权有向图中两点间的所有路径,我看了下,现成的算法如dijstra等都是求最短路径的没有求所有路径的,希望哪位高人能帮帮忙,实现一下,最好是java实现,要求列出所有的路径集合
如【0.2.5.6.8.9】88
【0.1.4.8.9】92
【0.1.2.5.7.9】56
。
即从源节点0到目的节点9 经过2..5.6.8节点 总权值为88
以此类推
如【0.2.5.6.8.9】88
【0.1.4.8.9】92
【0.1.2.5.7.9】56
。
即从源节点0到目的节点9 经过2..5.6.8节点 总权值为88
以此类推
解决方案 »
- 关于小数点后四舍五入保留小数的方法
- 下载exceL被IE阻止了。怎么解决啊?
- 静态方法做数值相加是否存在线程安全问题
- 怎样将字节流转换为String及字节序的转换
- 初学java看不懂关于接口的一个问题,请各位同僚帮忙,谢谢了
- 请问2345.2345如何格式化成2345.23
- 在applet中使用了JDom,在JBuider下运行正常,但在IE里面打开就不行,是怎么回事??
- 有没有大虾能帮我解答
- JAVA初学者 为什么这个程序先执行完主线程再执行子线程?
- 我目前有个假数据JSON格式的数组。我想创建一个实体类,然后存至,怎样最终获取这个数组
- 如何让jar文件在无Java环境的的机器上运行
- 一个字符串匹配
对了这个是不是要深度优先结合回溯法才能搞定呢?
大家指教!
图是有向加权图,要求路径没有回路,不形成环,是没有回路的简单路径
请帮帮忙 我着急用,但自己java刚学,写代码费劲 谢谢
public class Graph {
//有向带权图。-1表示无路可通。自己到自己也是-1。其它表示权值。
private static int[][] graph=
{
{-1,2,3,3},
{-1,-1,-1,2},
{-1,2,-1,3},
{-1,-1,-1,-1}
};
private static boolean[] hasFlag=new boolean[graph.length];
//true-表示该结点已访问过。false-表示还没有访问过。
private static ArrayList<String> res=new ArrayList<String>();
//最后的所有的路径的结果。每一条路径的格式是如:0->2->1->3:7
//求在图graph上源点s到目标点d之间所有的简单路径,并求出路径的和。
public static void getPaths(int s,int d,String path,int sum)
{
hasFlag[s]=true;//源点已访问过.
for(int i=0;i<graph.length;i++)
{
if (graph[s][i]==-1 || hasFlag[i]){continue;}
//若无路可通或已访问过,则找下一个结点。 if(i==d)//若已找到一条路径
{
res.add(path+"->"+d+":"+(sum+graph[s][i]));//加入结果。
continue;
}
getPaths(i, d, path+"->"+i, sum+graph[s][i]);//继续找
hasFlag[i]=false;
}//for(i)
}
public static void main(String[] args) {
// TODO Auto-generated method stub
getPaths(0, 3, ""+0, 0);//从源点:0 到目点:3,初始路径:"0" 初始和:0
for(String e:res)//打印所有的结果
{
System.out.println(e);
}
}}运行结果:
0->1->3:4
0->2->1->3:7
0->2->3:6
0->3:3