zoukankan      html  css  js  c++  java
  • 【蓝桥杯】历届试题 网络寻路(运行超时)

      历届试题 网络寻路  
    时间限制:1.0s   内存限制:256.0MB
          
    问题描述

    X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。

    源地址和目标地址可以相同,但中间节点必须不同。

    如下图所示的网络。

    1 -> 2 -> 3 -> 1 是允许的

    1 -> 2 -> 1 -> 2 或者 1 -> 2 -> 3 -> 2 都是非法的。

    输入格式

    输入数据的第一行为两个整数N M,分别表示节点个数和连接线路的条数(1<=N<=10000; 0<=M<=100000)。

    接下去有M行,每行为两个整数 u 和 v,表示节点u 和 v 联通(1<=u,v<=N , u!=v)。

    输入数据保证任意两点最多只有一条边连接,并且没有自己连自己的边,即不存在重边和自环。

    输出格式
    输出一个整数,表示满足要求的路径条数。
    样例输入1
    3 3
    1 2
    2 3
    1 3
    样例输出1
    6
    样例输入2
    4 4
    1 2
    2 3
    3 1
    1 4
    样例输出2
    10
     
    这道题运行超时了!!下面是超时代码:
    Java源代码:
     1 import java.util.Scanner;
     2 
     3 public class Main {
     4 
     5     static Node[] tab = null;
     6     static int[] visit = new int[10001];
     7     static int[] way = new int[10001];
     8     static int cnt = 0;
     9 
    10     public static void main(String[] args) {
    11         Scanner sc = new Scanner(System.in);
    12         int n, m, u, v, i;
    13         n = sc.nextInt();
    14         m = sc.nextInt();
    15         Init(n);
    16         while (m-- > 0) {
    17             u = sc.nextInt();
    18             v = sc.nextInt();
    19             Insert(u, v);
    20             Insert(v, u);
    21         }
    22         for (i = 1; i <= n; i++) {
    23             for (int j = 0; j < visit.length; j++) {
    24                 visit[j] = 0;
    25             }
    26             dfs(i, 0, i);
    27         }
    28         System.out.println(cnt);
    29     }
    30 
    31     static void dfs(int x, int n, int s) {
    32         visit[x] = 1;
    33         way[n] = x;
    34         Node p = tab[x];
    35         if (n >= 3) {
    36             cnt++;
    37             return;
    38         }
    39         while ((p = p.pNext) != null) {
    40             if ((visit[p.data] != 1) || (p.data == s && n == 2)) {
    41                 dfs(p.data, n + 1, s);
    42                 if (p.data != s) {
    43                     visit[p.data] = 0;
    44                 }
    45 
    46             }
    47         }
    48     }
    49 
    50     static void Init(int n) {
    51         int i;
    52         tab = new Node[n + 1];
    53         for (i = 1; i <= n; i++) {
    54             tab[i] = new Node();
    55             tab[i].data = i;
    56             tab[i].pNext = null;
    57         }
    58     }
    59 
    60     static void Insert(int n, int x) {
    61         Node p = tab[n];
    62         while (p.pNext != null) {
    63             p = p.pNext;
    64         }
    65         Node ne = new Node();
    66         p.pNext = ne;
    67         ne.data = x;
    68         ne.pNext = null;
    69     }
    70 }
    71 
    72 class Node {
    73     int data = 0;
    74     Node pNext = null;
    75 }
    评测点序号评测结果得分CPU使用内存使用下载评测数据
    1 正确 20.00 156ms 23.46MB 输入 输出
    2 正确 20.00 296ms 31.90MB 输入 输出
    3 正确 20.00 499ms 36.26MB 输入 输出
    4 运行超时 0.00 运行超时 73.03MB 输入 输出
    5 运行超时 0.00 运行超时 89.96MB 输入 输出
  • 相关阅读:
    server.Execute 执行子请求时出错
    mybatis逆向工程
    上传及下载github项目
    基于tess4j的图片文字提取
    myeclipse中更改默认jdk版本出错( Target is not a JDK root. System library was not found)
    SSM整合环境搭建demo
    AMD CPU环境下使用android studio,eclipse的Genymotion插件
    Android Studio电脑不支持HAXM的解决办法
    完整使用JDBC访问数据库
    springMVC保存数据到mysql数据库中文乱码问题解决方法
  • 原文地址:https://www.cnblogs.com/wuqianling/p/5369855.html
Copyright © 2011-2022 走看看