You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维8方向最短路径C语言代码优化咨询

优化8方向最短路径移动的C实现

问题回顾

在二维空间中,一个物体位于坐标(Fx/Fy),可向8个相邻方向(东E、东南SE、南S、西南SW、西W、西北NW、北N、东北NE)移动一步。该物体需以最快速度到达目标点(Zx/Zy)。要求先读取物体和目标点的坐标,然后沿最短路径移动,输出每一步的坐标,最后输出所需的总步数。

原代码存在全局变量耦合度高、逻辑拆分冗余、重复代码多的问题,以下是精简且易维护的优化实现:

#include <stdio.h>
#include <stdlib.h> // 用于abs函数

int main() {
    int fx, fy, zx, zy;
    int current_x, current_y;
    int step_count = 0;

    // 读取起始坐标
    printf("请输入起始坐标Fx和Fy: ");
    scanf("%d %d", &fx, &fy);
    printf("%d 和 %d\n", fx, fy);

    // 读取目标坐标
    printf("请输入目标坐标Zx和Zy: ");
    scanf("%d %d", &zx, &zy);
    printf("%d 和 %d\n", zx, zy);

    current_x = fx;
    current_y = fy;

    // 处理起始点即为目标点的情况
    if (current_x == zx && current_y == zy) {
        printf("已在目标点,总步数:0\n");
        return 0;
    }

    printf("移动路径:\n");
    // 循环执行移动直到到达目标点
    while (current_x != zx || current_y != zy) {
        // X方向向目标坐标靠拢
        if (current_x < zx) current_x++;
        else if (current_x > zx) current_x--;

        // Y方向向目标坐标靠拢
        if (current_y < zy) current_y++;
        else if (current_y > zy) current_y--;

        step_count++;
        printf("第%d步: X=%d, Y=%d\n", step_count, current_x, current_y);
    }

    printf("\n总步数:%d\n", step_count);
    return 0;
}

优化点说明

  • 移除全局变量:所有变量均在局部作用域内,降低代码耦合度,避免全局变量带来的意外修改风险
  • 合并逻辑流程:用单个循环处理所有移动步骤,无需拆分对角线和直线移动的独立函数,大幅减少冗余代码
  • 简化移动判断:每一步同时调整X、Y方向坐标,自然贴合8方向最短路径的逻辑(最短步数等于X/Y方向距离的最大值)
  • 增加边界处理:直接判断起始点就是目标点的场景,避免无效循环
  • 提升可读性:变量命名更直观,逻辑流程清晰易懂,便于后续维护和修改

内容的提问来源于stack exchange,提问作者TheLuckyGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:06:17