变形最短路径,最安全节点求解
来源:互联网 发布:南京淘宝美工培训班 编辑:程序博客网 时间:2024/06/05 09:50
在这个任务中,你会发现最安全的路径,通过一个图形。
传统的最短路径问题是在边上的,这次变形是位于节点上的。每个节点都有一个给定的概率,路径的总概率是它经过的节点的概率的乘集。
我们的目标是找到一个乘集最高的路径。
import java.io.BufferedReader;import java.io.FileReader;import java.io.InputStreamReader;import java.util.List;import java.util.Stack;import java.util.StringTokenizer;import java.util.ArrayList;public class Klassenavn {static Point[] ps;static Stack<Point> s = new Stack<Point>();static float _p = Float.MIN_VALUE;static String _path = "";public static String besteSti(int[][] nabomatrise, ArrayList<Float> sannsynligheter) {int s = sannsynligheter.size();ps = new Point[s];for (int i = 0; i < s; i++) {ps[i] = new Point(String.valueOf(i), sannsynligheter.get(i), new ArrayList<Point>(), false);}for (int i = 0, l = nabomatrise.length; i < l; i++) {for (int j = 0, l2 = nabomatrise[i].length; j < l2; j++) {if (1 == nabomatrise[i][j]) {ps[i].list.add(ps[j]);}}}cul(ps[0], ps[s - 1]);return _path.substring(0, _path.length() - 1);}public static void cul(Point u, Point v) {u.visited = true;s.push(u);if (u != null && u.list != null) {List<Point> temp = new ArrayList<Point>();for (Point p1 : u.list) {if (p1.visited) {continue;}if (p1.equals(v)) {s.push(v);float p = 1.f;String path = "";for (Point sp : s) {p *= sp.weight;path += (sp.n + "-");}if (_p < p) {_p = p;_path = path;}s.pop();continue;}temp.add(p1);cul(p1, v);for (Point p : temp) {p.visited = false;}}}s.pop();}public static class Point {String n;//结点名称float weight;//结点概率List<Point> list;//结点相连结点集合boolean visited;//是否被访问public Point(String n, float weight, List<Point> list, boolean visited) {super();this.n = n;this.weight = weight;this.list = list;this.visited = visited;}}public static void main(String[] args) {try {BufferedReader in = null;if (args.length > 0)in = new BufferedReader(new FileReader(args[0]));elsein = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(in.readLine());ArrayList<Float> sannsynligheter = new ArrayList<Float>();int[][] nabomatrise = new int[n][n];StringTokenizer st = new StringTokenizer(in.readLine());int i = 0, j = 0;while (st.hasMoreTokens())sannsynligheter.add(new Float(st.nextToken()));for (i = 0; i < n; i++) {st = new StringTokenizer(in.readLine());while (st.hasMoreTokens()) {nabomatrise[i][Integer.parseInt(st.nextToken())] = 1;}}System.out.println(besteSti(nabomatrise, sannsynligheter));} catch (Exception e) {e.printStackTrace();}}}
- 变形最短路径,最安全节点求解
- POJ2253 最短路径变形
- 迷宫最短路径求解
- matlab求解最短路径
- 变形的最短路径 POJ 3621
- POJ 2253 最短路径变形
- poj 1860 最短路径变形
- Arbitrage 最短路径的变形 flord
- A* 算法求解最短路径
- A* 算法求解最短路径
- A*算法求解最短路径
- Bellman-Ford求解单元最短路径
- Dijkstra求解单源点最短路径
- Dijkstra最短路径问题求解
- BFS 算法求解最短路径
- floyd算法求解最短路径
- Dijkstra算法求解最短路径
- BFS求解迷宫最短路径
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- 新手入门AMF协议基础全解
- 为什么最后你哪也没去?
- android BitmapFactory.Options(总结网络中出现的一些)
- (c++)图形2
- 变形最短路径,最安全节点求解
- 查看CPU负载
- 如何修改ios的导航条上面的文字颜色和大小等
- linux系统,面对一大堆目录,我想找一个文件,知道文件的名字,但是不知道在哪个目录下,怎么办
- weblogic
- 企业级GIS系统架构介绍——总览
- 003java面试笔记——【java基础篇】从团八百失败面试总结的java面试题(未完待续)
- C#高级应用-反射动态调用类的成员范例代码
- 上机项目--求出工资