POJ3259-JAVA语言描述-Bellman_Ford算法
2016-05-02 12:51
483 查看
读懂题意真难,时间都浪费在理解题意上面了。然后,发现,,这又是一个水题!分分钟撸完了!!!!
引用这里的解释吧我就不多加赘述了!
给你们解释下输入案例数据也许会更清晰的哟!下面看代码,注释很详细!!
若有bug,不足,望悉心指出,thanks!!!!
样例的输出为:
NO
YES
引用这里的解释吧我就不多加赘述了!
给你们解释下输入案例数据也许会更清晰的哟!下面看代码,注释很详细!!
若有bug,不足,望悉心指出,thanks!!!!
import java.io.BufferedInputStream; import java.util.Scanner; /* * 输入: 2 //农场个数 3 3 1 //田地 路径 虫洞 分别的个数 1 2 2 //田地路径 起点 终点 权值 1 3 4 2 3 1 3 1 3 //虫洞路径 起点 终点 权值(记得,事实上市负的) 3 2 1 //田地 路径 虫洞 分别的个数 1 2 3 //田地路径 起点 终点 权值 2 3 4 3 1 8 //虫洞路径 起点 终点 权值(记得,事实上市负的) * * */ public class POJ3259 { static int M = 6000, N = 500 + 20, Inf = 1000000000 + 10; static edge_3295 e[] = new edge_3295[M]; static void start() { for (int i = 0; i < M; i++) { e[i] = new edge_3295(); } } public static void main(String[] args) { // TODO Auto-generated method stub int d[] = new int ; start(); Scanner sc = new Scanner(new BufferedInputStream(System.in)); int F = sc.nextInt(); int n, m, w, s, t, l, top; while (F-- != 0) {//有多少组数据,while 循环读入 //要读入的数据有规律 第一行是 图的节点数 和 边数,但是注意咯 ,这里的边都是可以往返的,所以咯有了下面的 top = 0; n = sc.nextInt(); m = sc.nextInt(); w = sc.nextInt(); for (int i = 0; i < m; i++) { s = sc.nextInt(); t = sc.nextInt(); l = sc.nextInt(); e[top++].set(s, t, l);//注意咯上面说的下面 是这里 e[top++].set(t, s, l);//这里对 s 和 t or t和s 进行了两次保存,就是因为线路是可以反向的 } for (int i = 0; i < w; i++) { s = sc.nextInt(); t = sc.nextInt(); l = sc.nextInt(); e[top++].set(s, t, -l); } if (Bellman_Ford(n, top, d, 0, e)) { System.out.println("NO"); } else { System.out.println("YES"); } } } private static boolean Bellman_Ford(int n, int m, int[] d, int s, edge_3295[] e) {//Bellman_Ford 核心代码,模板,这里我就不多解释了 // TODO Auto-generated method stub for (int i = 0; i <= n; i++) { d[i] = Inf; } d[s] = 0; int check; for (int i = 0; i < n - 1; i++) { check = 0; for (int j = 0; j < m; j++) { if (d[e[j].t] > d[e[j].s] + e[j].l) { d[e[j].t] = d[e[j].s] + e[j].l; check=1; } } if (check == 0) { break; } } for (int i = 0; i < m; i++) { if (d[e[i].t] > d[e[i].s] + e[i].l) { return false; } } return true; } } class edge_3295 { int s; int t; int l; public void set(int _s, int _t, int _l) { this.s = _s; this.t = _t; this.l = _l; } }
样例的输出为:
NO
YES
相关文章推荐
- Spring.Net初认识——竹子整理
- Java中获取文件大小的正确方法
- java基础一(阅读Head First Java记录)
- JAVA 解析JSON数据
- junit4 javaee 5.0 jpa SSH 单元测试问题集锦
- java关于参数传递的思考
- java学习--冒泡排序
- Spark-Avro学习7之Java Avro使用(生成code方式)
- 码农小汪-Spring MVC 处理器拦截器详解
- Java错误提示:Syntax error, insert "}" to complete Block
- RxJava与Retrofit结合学习
- SpringData 学习(3)—— 通过“规范”的方法实现查询
- Ubuntu Android 开发(一) JDK 安装
- Java File类的使用
- MyEclipse配置SVN
- 【Java学习-J.160430.0.15】笔记8-使用JDBC连接数据库
- Java 正则表达式
- spring boot 静态资源处理
- Java 自定义注解
- java循环