当前位置: 首页 > article >正文

小H喜欢睡觉(C语言实现)

小H十分喜欢睡觉,这天他起来一看,居然9.30了,而他答应了10点要到小W家去,小H想走知道小H到小W家的最短时间是多少,你能帮帮他吗。

地图是n * m的网格,每个单元是一个开放空间或建筑物(无法通过),小H的加在(1,1),小W 在(x,y)处,他只能上下左右移动,每一步需要1分钟。 输入数据可确保小W家可到达。

输入格式:

第一行具有两个正整数n,m,以空格(1 <= n,m <= 100)隔开,n为行,m为列
接下来是两个正整数x,y,用空格隔开(1 <= x <= n,1 <= y <= m)指示教学大楼的坐标
接下来是n行和m列的地图,0表示开放空间,1表示障碍物。

输出格式:

对于每个测试用例,输出一行包含整数的行,该行给出了小H到达小W家所需的最短时间(以分钟为单位)。

输入样例:

5 4
4 3
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1

输出样例:

7

代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX_N 100
#define MAX_M 100

int n, m;
int x, y;
int grid[MAX_N][MAX_M];
int dist[MAX_N][MAX_M]; // 用于存储小H到每个位置的距离

// 计算从当前位置到目标位置的距离
int calculate_distance(int x, int y) {
    int dx = abs(x - 1), dy = abs(y - 1);
    return dx + dy;
}

// 找到从当前位置到小W家的最短距离
int shortest_distance() {
    int min_distance = INT_MAX;
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            if (grid[i][j] == 0) { // 如果当前位置是开放空间
                min_distance = min(min_distance, calculate_distance(i, j));
            }
        }
    }
    return min_distance;
}

int main() {
    scanf("%d %d", &n, &m);
    scanf("%d %d", &x, &y);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &grid[i][j]);
        }
    }
    dist[1][1] = shortest_distance(); // 从当前位置开始计算距离并存储到dist数组中
    printf("%d\n", dist[n][m]); // 输出最短距离
    return 0;
}

 这段代码首先读入地图的大小、小H和小W的位置,以及地图的格子状态。然后使用一个二维数组dist来存储小H到每个位置的距离,其中dist[i][j]表示小H从位置(i, j)到小W家的距离。在计算距离时,如果当前位置是开放空间,则将其与小H当前位置的距离进行比较,并更新最短距离。最后,输出最短距离即可。


http://www.kler.cn/a/147282.html

相关文章:

  • Excel使用-弹窗“此工作簿包含到一个或多个可能不安全的外部源的链接”的发生与处理
  • C++ 的发展
  • python面向对象基础入门
  • C++map和set(二)
  • 图像深度与像素深度的辨析
  • Nginx 上安装 SSL 证书并启用 HTTPS 访问
  • 多传感器融合SLAM调研
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件
  • C#——多线程之异步调用容易出现的问题
  • Go语言初始化已有环境,跟踪已有依赖环境
  • Android设计模式--桥接模式
  • 数据可视化:在Jupyter中使用Matplotlib绘制常用图表
  • Echarts大屏可视化_02 球体模块制作
  • kafka的详细安装部署
  • Vue路由跳转页面刷新
  • 87基于matlab的双卡尔曼滤波算法
  • java游戏制作-王者荣耀游戏
  • linux环境下samba服务器的配置
  • MYSQL 排序和分组怎么做?
  • ChatGLM2-6B微调过程说明文档
  • C语言基础篇5:指针(二)
  • C#,《小白学程序》第三课:类class,类的数组及类数组的排序
  • 在Spring Boot中使用@Async异步任务的线程池
  • Selenium 连接到现有的 Firefox 示例
  • C语言--每日选择题--Day27
  • buuctf web [极客大挑战 2019]PHP