危险系数 抗日战争时期,冀中平原的地道战曾发挥重要作用。

来源:互联网 发布:编程语言有哪些 编辑:程序博客网 时间:2024/04/30 04:34
package org.bluebridge.topics;/* * 危险系数 抗日战争时期,冀中平原的地道战曾发挥重要作用。 地道的多个站点间有通道连接,形成了庞大的网络。 但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。   我们来定义一个危险系数DF(x,y): 对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。 相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。 本题的任务是:已知网络结构,求两站点之间的危险系数。 输入数据第一行包含2个整数n(2 <= n <= 1000), m(0 <= m <= 2000),分别代表站点数,通道数; 接下来m行,每行两个整数 u,v (1 <= u, v <= n; u != v)代表一条通道; 最后1行,两个数u,v,代表询问两点之间的危险系数DF(u, v)。 输出:一个整数,如果询问的两点不连通则输出-1. 例如: 用户输入: 7 6 1 3 2 3 3 4 3 5 4 5 5 6 1 6 则程序应该输出: 2 * */import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;class Vex {int go, to;Vex next;public Vex() {}public Vex(int go, int to) {this.go = go;this.to = to;}}public class DangerNumber {static boolean visited[];static Vex vs[];static int u, v;public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String order[] = br.readLine().split(" ");int n = Integer.parseInt(order[0]), m = Integer.parseInt(order[1]);visited = new boolean[n + 1];vs = new Vex[n + 1];for (int i = 1; i < vs.length; i++)vs[i] = new Vex();// 创建邻接表for (int i = 0; i < m; i++) {String data[] = br.readLine().split(" ");int go = Integer.parseInt(data[0]);int to = Integer.parseInt(data[1]);Vex vo = vs[go];while (vo.next != null)vo = vo.next;vo.next = new Vex(go, to);Vex vt = vs[to];while (vt.next != null)vt = vt.next;vt.next = new Vex(to, go);}String[] want = br.readLine().split(" ");u = Integer.parseInt(want[0]);v = Integer.parseInt(want[1]);who = new int[n + 1];// 保存每个点在u-v各个路段中,出现的次数find(vs[u].next, u, u + "");int result = 0;for (int i = 1; i < who.length; i++) {if (i != u && i != v && who[i] == count)result++;}System.out.println(result);}static int[] who;static int count = 0;private static void find(Vex vex, int to, String str) {// 出口if (to == v) {// System.out.println(str);count++;// 一共有多少条路String result[] = str.split("-");for (int i = 0; i < result.length; i++)who[Integer.parseInt(result[i])]++;// 如果每段路,都有出现count次的点,那么它就是一个危险系数}while (vex != null) {visited[vex.go] = true;if (!visited[vex.to]) {find(vs[vex.to].next, vex.to, str + "-" + vex.to);}visited[vex.go] = false;vex = vex.next;}}}

0 0
原创粉丝点击