• 蓝桥杯 危险系数 图算法


    题目描述

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

    地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。

    我们来定义一个危险系数 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.

    输入输出样例

    示例

    输入

    1. 7 6
    2. 1 3
    3. 2 3
    4. 3 4
    5. 3 5
    6. 4 5
    7. 5 6
    8. 1 6

    输出

    2
    

    运行限制

    • 最大运行时间:1s
    • 最大运行内存: 64M

    精选项目课程_IT热门课程_蓝桥云课课程 - 蓝桥云课

    ===========================================

    图算法

    1. import java.util.Scanner;
    2. public class Main {
    3. static int[][] maps = null;
    4. static int n, m, start, end, ways = 0, result = 0;
    5. static int[] visit, num;
    6. public static void main(String[] args) {
    7. // TODO Auto-generated method stub
    8. Scanner sc = new Scanner(System.in);
    9. n = sc.nextInt();// 站点数
    10. m = sc.nextInt();// 通道数
    11. maps = new int[n + 1][n + 1];// 保存地图
    12. visit = new int[n + 1];//保存已经访问过的节点
    13. num = new int[n + 1]; //保存每个节点在所有路径方案上出现的次数
    14. for (int i = 0; i < m; i++) {
    15. int a = sc.nextInt();
    16. int b = sc.nextInt();
    17. maps[a][b] = 1;
    18. maps[b][a] = 1;
    19. }
    20. start = sc.nextInt();
    21. end = sc.nextInt();
    22. visit[start] = 1;
    23. // 获取ways -- 路径数
    24. dfs(start);
    25. for (int i = 1; i <= n; i++) {
    26. if (i != start && i != end) {
    27. // 如果经过节点的路径=路径数 就是关键节点
    28. if (num[i] == ways) {
    29. result++;
    30. }
    31. }
    32. }
    33. System.out.print(result);
    34. }
    35. /**
    36. * 以cur为起点到终点的方案数
    37. * @param cur
    38. * @return
    39. */
    40. public static int dfs(int cur) {
    41. int findEndnum = 0; //保存这个节点后面的方案数
    42. for (int i = 1; i <= n; i++) {
    43. if ((visit[i] == 0) && (maps[cur][i] == 1)) {
    44. visit[i] = 1;
    45. if (i == end) {
    46. ways += 1;
    47. findEndnum += 1; //如果cur节点能直接到达终点,数量加1
    48. } else {
    49. findEndnum += dfs(i);//得到节点后面的所有能够达到终点的路径种数(除了直接到达哪一种)
    50. }
    51. visit[i] = 0; //回溯
    52. }
    53. }
    54. num[cur] += findEndnum; //得到这个节点之后能到达终点的所有方案数量
    55. return findEndnum;
    56. }
    57. }

  • 相关阅读:
    企业怎样选择适合的服务器租用?
    云原生中间件RocketMQ-生产者核心解析、主从同步机制解析,生产者同步异步消息发送
    ArcGIS 软件中路网数据的制作,手把手教学
    C语言之:数组的定义和初始化必备练习题
    svg学习 路由跳转方式以及传(获取)参 路由获取参数 懒加载
    网络安全进阶学习第十九课——CTF之密码学
    Java专题训练——21天学习挑战赛
    可删除背包(计数类)=>转移数组进行展开:ABC321F
    用Python计算点估计预测评价指标(误差指标RMSE、MSE、MAE、MAPE) ,画图展示
    qt5.15源码编译
  • 原文地址:https://blog.csdn.net/weixin_45322373/article/details/127694880