2023华为OD机试真题-基站维修工程师(JAVA、Python、C++)

2023-11-13

题目描述:
小王是一名基站维护工程师,负责某区域的基站维护。
某地方有n个基站(1<n<10),已知各基站之间的距离s(0<s<500),并且基站x到基站y的距离,与基站y到基站x的距离并不一定会相同。
小王从基站1出发,途径每个基站1次,然后返回基站1,需要请你为他选择一条距离最短的路线。
输入描述:
站点数n和各站点之间的距离(均为整数)。如:
3 {站点数}
0 2  l  {站点1到各站点的路程}
1 0 2  {站点2到各站点的路程}
2 1 0  {站点3到各站点的路程} 

输出描述:
最短路程的数值
补充说明:
 收起
示例1
输入:
3
0 2 1
1 0 2
2 1 0
输出:
3
 

import java.util.*;
public class Main {
    static int min = 5000;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
 
        while (in.hasNext()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
            int a = in.nextInt();
            int[][] arr1 = new int[a][a];
            for (int i = 0; i < a; i++) {
                for (int j = 0; j < a; j++) {
                    arr1[i][j] = in.nextInt();
                }
            }
            int[] jizhan = new int[a];
            for (int i = 0; i < a; i++) {
                jizhan[i] = 1;
            }
            jisuan(arr1, jizhan, 0, 0, 0);
            System.out.println(min);
        }
 
 
    }
    static public void jisuan(int[][] arr1, int[] jizhan, int now, int bushu,
                              int sum) {
        if (bushu == jizhan.length - 1) {
            //System.out.println("sum:"+sum);
            //System.out.println(arr1[now][0]);
            sum = sum + arr1[now][0];
            //System.out.println("now:"+now);
            //System.out.println("sum:"+sum);
            min = Math.min(min, sum);
            return;
        }
        for (int i = 1; i < jizhan.length; i++) {
            if (jizhan[i] != 0) {
                jizhan[i] = 0;
                jisuan(arr1, jizhan, i, bushu + 1, sum + arr1[now][i]);
                jizhan[i] = 1;
            }
        }
    }
}
while True:
    try:
        m = int(input())
        lis = list()
        if m < 2:
            print(0)
            break
        for i in range(m):
            lis.append(list(map(int, input().strip().split())))
        dp = [[] * m for j in range(m)]
        a = 0
        while a < m:
            for i in range(m):
                dp[a].append(lis[i][a])
            a += 1
        res = 0
        for i in dp:
            num = sorted(i)
            res += num[1]
        print(res)
    except:
        break
#include <iostream>
#include <string>
#include <string.h>
#include <vector>
#include <unordered_map>
 
using namespace std;
 
static    unordered_map<int,int> gRoad;   //!使用hash来表示当前路径是否走过
static     int         gMinWay;
static     int         gNum;
 
 
//! 检查当前基站是否已走过
static bool check(int x)
{
 //! 如果没找到表示还没走过
 if (gRoad.find(x) != gRoad.end())
 {
  return false;
 }
 
 return true;
}
//! 回溯
//! board: 棋盘
//! road : 基站,基站英文不会拼
//! way  : 距离,当前已走的距离  ps:有没有可能越界
static void backTracking(vector<vector<int>> &board,int road,int way)
{
 //! 终止条件
 if (gRoad.size() == gNum)
 {
  way += board[road][0];   //! 当前已走的路程加上最后返回的路程
  gMinWay = gMinWay < way? gMinWay: way;
  return;
 }
 
 for (int i = 0; i < gNum; i++)
 {
  //! 剪枝
  if (!check(i))
  {
   continue;
  }
  gRoad[i] = 0;   //! 值不重要,重要的是记录路径
  way      += board[road][i];
  //! 递归找下一个
  backTracking(board,i, way);
  //! 回溯
  gRoad.erase(i);
  way -= board[road][i];
 }
 
}
 
int main(void)
{
 int  tNum;      //! 基站个数
 
 cin >> tNum;   //! 拿到基站的个数
 
 vector<vector<int>> tBoard(tNum,vector<int>(tNum));  //! 初始化棋盘
 
 //! 初始化
 gNum    = tNum;
 gMinWay = 0x7FFFFFFF;   //! 默认初始路程为无穷大
 
 for (int i = 0; i < tNum; i++)
 {
  for (int j = 0; j < tNum; j++)
  {
   cin >> tBoard[i][j];
  }
 }
 
 //! 时间原因,采用回溯,希望不超时
 gRoad[0] = 0;    //! 将基站1,放到hash中去
 backTracking(tBoard,0,0);
 
 gRoad.clear();   //! 清空hash表,释放内存
 
 printf("%d", gMinWay);
 
 return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023华为OD机试真题-基站维修工程师(JAVA、Python、C++) 的相关文章

  • 用于多个窗口的 Tkinter 示例代码,为什么按钮无法正确加载?

    我正在编写一个程序 应该 按一下按钮即可打开一个窗口 按另一个按钮关闭新打开的窗口 我使用类 以便稍后可以将代码插入到更大的程序中 但是 我无法正确加载按钮 import tkinter as tk class Demo1 tk Frame
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 具有多个主键的 SQLAlchemy 不会自动设置任何

    我有一个简单的表 class test Base tablename test id Column Integer primary key True title Column String def init self title self
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • 线性同余生成器 - 如何选择种子和统计检验

    我需要做一个线性同余生成器 它将成功通过所选的统计测试 我的问题是 如何正确选择发电机的数字以及 我应该选择哪些统计检验 我想 均匀性的卡方频率测试 每代收集10 000个号码的方法 将 0 1 细分为10个相等的细分 柯尔莫哥洛夫 斯米尔
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • python dicttoxml 多次使用相同的键

    我正在尝试做如下所示的 xml
  • 在 Python 中访问 argparse 的参数值

    我正在尝试为我的程序设置一些简单的标志参数 但无法弄清楚如何访问它们 我有 argparser parser argparse ArgumentParser description Simple PostScript Interpreter
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • 如何使用 Python 3 正确显示倒计时日期

    我正在尝试获取将显示的倒计时 基本上就像一个世界末日时钟哈哈 有人可以帮忙吗 import os import sys import time import datetime def timer endTime datetime datet
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐