首页 > 其他分享 >计算网络信号、信号强度

计算网络信号、信号强度

时间:2023-08-12 18:03:17浏览次数:28  
标签:int 网络 信号源 信号强度 -- static 信号 arrived

题目描述

网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值 注意:网络信号可以绕过阻隔物

array[m][n] 的二维数组代表网格地图 array[i][j] = 0 代表第计算网络信号、信号强度_数组是空旷位置 array[i][j] = x (x为正整数)代表 计算网络信号、信号强度_数组 是信号源,信号强度是 计算网络信号、信号强度_数组_03 array[i][j] = -1代表 计算网络信号、信号强度_数组 是阻隔物 信号源只有1个,阻隔物可能有0个或多个 网络信号衰减是上下左右相邻的网格衰减1 现要求输出 对应位置的网络信号值

输入描述

输入为三行

  • 第一行为 计算网络信号、信号强度_用例_05 代表输入是一个 计算网络信号、信号强度_用例_06 的数组
  • 第二行是一串 个用空格分隔的整数
  • 每连续 n 个数代表一行,
  • 再往后 n 个代表下一行,以此类推。
  • 对应的值代表对应的网格是空旷位置,还是信号源,或是阻隔物
  • 第三行是 代表需要计算 array[i][j] 的网络信号值
  • 注意:此处 计算网络信号、信号强度_System_07 均从 0 开始,即第一行 计算网络信号、信号强度_System_08 为 0

例如

6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0
1 4

代表如下地图

0

0

0

-1

0

0

0

0

0

0

0

0

-1

4

0

0

0

0

0

0

0

0

0

0

-1

0

0

0

0

0

如上表格:需要输出第 1 行、第 4 列的网格信号值 信号源处信号强度为 4 ,信号经过衰减在 第 1 行、第 4 列的网格信号值是 2

输出描述

输出对应位置的网格信号值,如果网格信号未达到,输出 0 一个网格如果可以途径不同的传播衰减路径传达,取较大的值作为其信号值.

用例

用例1

--输入
6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0
1 4

--输出
2

--说明
无

用例2

--输入
6 5
0 0 0 -1 0 0 0 0 0 0 0 0 -1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 1

--输出
0

--说明
无

show code

package com.hw;

import java.util.Scanner;

/**
 * desc :  <a href="https://fcqian.blog.csdn.net/article/details/128233067">计算网络信号、信号强度</a>
 * <p>
 * create time : 2023/8/12 15:54
 */
public class CalculateSignal {

    private static int i;
    private static int j;
    private static int[][] chart;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int m = in.nextInt();
            int n = in.nextInt();
            chart = new int[m][n];
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    chart[i][j] = in.nextInt();
                }
            }

            i = in.nextInt();
            j = in.nextInt();

            calculateSignal(m, n);
        }
    }

    /*
     *     信号源的位置首先是不确定的,那么首先可以先找到信号源的位置。
     *     假设信号源的位置确定之后是  (x, y)
     *     --然后需要确定  从点  (x, y) 到目标点 (i, j) 的所有可达路径.
     *     --然后找到最大的信号强度.
     *
     *     --那么从信号源出发的话,每一次有上下左右四个方向的选择.
     *     ----遇到障碍的话,路径打断,去过的位置进行标记,避免重复.
     *     ----信号源每次传播一次,信号强度衰减 1,当信号强度为 0 的时候中断.
     *     ----当遇到 目标点的时候,记录当前传播路径的的信号强度,最后输出最大的信号强度.
     */

    private static int x;
    private static int y;

    private static int ans;

    private static void calculateSignal(int m, int n) {
        // 先找到信号源头的位置.
        for (int k = 0; k < m; k++) {
            for (int l = 0; l < n; l++) {
               if(chart[k][l] != 0 && chart[k][l] != -1) {
                   // 找到了信号源头的位置.
                   x = k;
                   y = l;
               }
            }
        }

        //  信号源位置是  (x, y)
        if(x == i && y == j) {
            // 信号源位置 和 需要计算的网格信号值的位置一样
            System.out.println(chart[x][y]);
            return;
        }


        //  设计签名函数
        //  --现在我要干什么?——需要从 (x, y) 出发到点  (i, j)
        //  --记录一下当前的信号强度
        //  --用一个数组记录到达过的位置
        //  --从那一个位置出发,以及当前所到达的位置

        boolean[][] arrived = new boolean[m][n];
        // 初始化,在 (x, y) 位置,这个时候,标记为 true.
        arrived[x][y] = true;

        ans = 0;

        dfs(chart[x][y], arrived, x, y);

        System.out.println(ans);
    }

    // 上下左右  四个方向.
    // 右:列+1
    // 左:列-1
    // 上:行-1
    // 下:行+1
    private static final int[][] directions = {{0, 1}, {-1, 0}, {-1, 0}, {1, 0}};

    private static void dfs(int signal, boolean[][] arrived, int x, int y) {
        // 首先-终止条件.
        if(x == i && y == j && signal >= 0) {
            // 到达了目标位置,可以之间返回当前信号强度了.
            ans = Math.max(ans, signal);
            return;
        }

        // 信号强度 等于0,直接返回.
        // 等于 0 之后还没有到达目标点的话,就直接返回了.
        if(signal == 0) {
            return;
        }

        // 从点  x,y 出发,走 上下左右 四个方向走.
        for (int[] direction : directions) {
            int newX = x + direction[0];
            int newY = y + direction[1];

            // 首先判断是否越界
            if(newX < 0 || newX >= arrived.length || newY < 0 || newY >= arrived[0].length) {
                continue;
            }

            // 如果这个点到达过了 或者 遇到障碍--跳过  并且还不能越界
            if(arrived[newX][newY] && chart[newX][newY] == -1) {
                continue;
            }

            arrived[newX][newY] = true;

            dfs(signal - 1, arrived, newX, newY);

            arrived[newX][newY] = false;
        }

    }

}

标签:int,网络,信号源,信号强度,--,static,信号,arrived
From: https://blog.51cto.com/u_16079703/7060421

相关文章

  • 【做题笔记】网络流24题
    Part1.飞行员配对方案问题Problem有两个集合\(A\),\(B\)。给定正整数\(n\),\(m\)。\(A=\{x|1\leqx\leqm\}\),\(B=\{y|m+1\leqy\leqn\}\)。现在要将\(A\)与\(B\)集合的元素一一配对,有若干个配对关系,形如“\(u\),\(v\)可凑一对”。求有多少个元素能配成一对,并求......
  • 探索Masscan:全面解析高速网络扫描的神兵利器
    在网络安全领域,高速扫描是一项不可或缺的任务,而Masscan作为一款高性能的网络扫描工具,能够以惊人的速度快速探测大规模网络。本篇博客将深入探讨Masscan的各种参数,逐一介绍其用途、特点和实际应用,帮助你充分了解Masscan并发挥其强大威力。Masscan概览Masscan是一款开源、高速的端口......
  • CentOS7.*基础网络配置
    基础网络配置Ip地址: 唯一表示网络中主机地址的标识,由.隔开的四组十进制数组成每一组数不超过255子网掩码:用来确定IP的网络地址网关:访问其它网段时需要通过的设备IP地址,不同网段通讯需要经过路由器转发出去(网关)Dns服务器:进行域名与ip解析的服务器查看所有网络接口的信息ifconf......
  • 7.7 通俗易懂详解稠密连接网络DenseNet & 手撕稠密连接网络DenseNet
    一.思想与ResNet的区别DenseNet这样拼接有什么好处?DenseNet优点对于每一层,使用前面所有层的特征映射作为输入,并且其自身的特征映射作为所有后续层的输入。DenseNet的优点:缓解了消失梯度问题,加强了特征传播,鼓励特征重用,并大大减少了参数的数量,改进了整个网络的信息流和梯度,这使得......
  • 网络流在入门ing
    网络流入门推荐这个视频,之前生看书的话,知识储备存在断层,而这个UP则详细讲述了网络流的产生过程,没想到和线性规划还这么密切。有空补档......
  • Ubuntu创建桥接网络
    我这才用的是Ubuntu的netplan网络管理,当然也可以采用systemd-network网络管理。未测试通过,所以下操作均建立在netplan管理方式上。设置桥接安装bridge-utilsaptinstallbridge-utils-y创建名为br0桥接虚拟网卡brctladdbrbr0设置桥接#查看一下宿主机网卡名,网卡名为:enp3s0f......
  • k8s 网络模型
    容器网络通信模式在Host模式中,各容器共享宿主机的根网络名称空间,它们使用同一个接口设备和网络协议栈,因此,用户必须精心管理共享同一网络端口空间容器的应用与宿主机应用,以避免端口冲突。Bridge模式对host模式进行了一定程度的改进,在该模式中,容器从一个或多个专用网络(地址池)中获取IP......
  • k8s 网络模型
    容器网络通信模式在Host模式中,各容器共享宿主机的根网络名称空间,它们使用同一个接口设备和网络协议栈,因此,用户必须精心管理共享同一网络端口空间容器的应用与宿主机应用,以避免端口冲突。Bridge模式对host模式进行了一定程度的改进,在该模式中,容器从一个或多个专用网络(地址池)中获取IP......
  • 网络传输数据的编解码
    网络传输数据的类型(二进制)网络传输是以二进制数据进行传输的,因此在网络传输数据的时候,数据需要先编码转化为二进制(bytes)数据类型数据的编解码 在Python中进行网络数据传输编解码通常涉及到将数据转换为字节流进行传输,并在接收方将字节流转换回原始数据。编码编码是将数据......
  • 基于FFT傅里叶变换的64QAM基带信号频偏估计和补偿算法FPGA实现,包含testbench和matlab
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,并使用matlab2022a对结果进行星座图的显示:    将FPGA的频偏基带QPSK信号和频偏补偿后的QPSK基带信号使用matlab显示星座图,结果如下:   2.算法涉及理论知识概要        FFT傅里叶变换是一种高效的......