蓝桥杯 危险系数 图算法
相应的,对于任意一对站点 xx 和 yy,危险系数 DF(x,y)DF(x,y) 就表示为这两点之间的关键点个数。输入数据第一行包含 2 个整数 n\ (2 \leq n \leq 1000), m\ (0 \leq m \leq 2000)n (2≤n≤1000),m (0≤m≤2000),分别代表站点数,通道数;接下来 mm 行,每行两个整数 u,v\ (1 \leq u, v \leq n,
题目描述
抗日战争时期,冀中平原的地道战曾发挥重要作用。
地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。
我们来定义一个危险系数 DF(x,y)DF(x,y):
对于两个站点 xx 和 y\ (x != y)y (x!=y), 如果能找到一个站点 zz,当 zz 被敌人破坏后,xx 和 yy 不连通,那么我们称 zz 为关于 x,yx,y 的关键点。相应的,对于任意一对站点 xx 和 yy,危险系数 DF(x,y)DF(x,y) 就表示为这两点之间的关键点个数。
本题的任务是:已知网络结构,求两站点之间的危险系数。
输入描述
输入数据第一行包含 2 个整数 n\ (2 \leq n \leq 1000), m\ (0 \leq m \leq 2000)n (2≤n≤1000),m (0≤m≤2000),分别代表站点数,通道数;
接下来 mm 行,每行两个整数 u,v\ (1 \leq u, v \leq n, u != v)u,v (1≤u,v≤n,u!=v) 代表一条通道;
最后 1 行,两个数 u,vu,v,代表询问两点之间的危险系数 DF(u, v)DF(u,v)。
输出描述
输出一个整数,如果询问的两点不连通则输出 -1.
输入输出样例
示例
输入
7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6
输出
2
运行限制
- 最大运行时间:1s
- 最大运行内存: 64M
===========================================
图算法
import java.util.Scanner;
public class Main {
static int[][] maps = null;
static int n, m, start, end, ways = 0, result = 0;
static int[] visit, num;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
n = sc.nextInt();// 站点数
m = sc.nextInt();// 通道数
maps = new int[n + 1][n + 1];// 保存地图
visit = new int[n + 1];//保存已经访问过的节点
num = new int[n + 1]; //保存每个节点在所有路径方案上出现的次数
for (int i = 0; i < m; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
maps[a][b] = 1;
maps[b][a] = 1;
}
start = sc.nextInt();
end = sc.nextInt();
visit[start] = 1;
// 获取ways -- 路径数
dfs(start);
for (int i = 1; i <= n; i++) {
if (i != start && i != end) {
// 如果经过节点的路径=路径数 就是关键节点
if (num[i] == ways) {
result++;
}
}
}
System.out.print(result);
}
/**
* 以cur为起点到终点的方案数
* @param cur
* @return
*/
public static int dfs(int cur) {
int findEndnum = 0; //保存这个节点后面的方案数
for (int i = 1; i <= n; i++) {
if ((visit[i] == 0) && (maps[cur][i] == 1)) {
visit[i] = 1;
if (i == end) {
ways += 1;
findEndnum += 1; //如果cur节点能直接到达终点,数量加1
} else {
findEndnum += dfs(i);//得到节点后面的所有能够达到终点的路径种数(除了直接到达哪一种)
}
visit[i] = 0; //回溯
}
}
num[cur] += findEndnum; //得到这个节点之后能到达终点的所有方案数量
return findEndnum;
}
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)