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

如何从二维数组中查找最近坐标点?C语言实现咨询

遍历二维数组找出最近点的C语言实现

问题背景

我们用C语言定义了一个5行3列的二维数组,用来存储点的ID、X坐标、Y坐标:

// 注意:A/B/C/D/E需先定义为整数常量,比如#define A 1,否则编译会报错
int array[5][3] = { {A, 200, 400}, {B, 300, 600}, {C, 100, 200}, {D, 300, 100}, {E, 200, 400} };

对应的点信息表格:

IDXY
A200400
B300600
C100200
D300100
E200400

现有目标坐标 valueX=150、valueY=170,已知单个点的欧氏距离计算代码,但该代码仅能计算第一行的距离:

int cx = array[0][1] - valueX;
int cy = array[0][2] - valueY;
int FindClosest = sqrt(cx * cx + cy * cy);

现在需要遍历所有数组行计算距离,找出距离最近的点并输出结果(本例中最近点为ID=C)。


实现思路

  1. 初始化变量记录当前最小距离和对应点ID
  2. 遍历数组每一行,计算当前点到目标点的欧氏距离
  3. 对比当前距离与最小距离,若更小则更新最小距离和对应ID
  4. 遍历结束后输出最近点信息

完整代码实现

#include <stdio.h>
#include <math.h>

// 定义ID对应的整数常量
#define A 1
#define B 2
#define C 3
#define D 4
#define E 5

int main() {
    int array[5][3] = { {A, 200, 400}, {B, 300, 600}, {C, 100, 200}, {D, 300, 100}, {E, 200, 400} };
    int valueX = 150, valueY = 170;
    
    // 初始化最小距离为极大值,避免初始值干扰判断
    double minDistance = 1e9;
    int closestId = array[0][0]; // 默认取第一个点的ID
    
    // 遍历数组所有行
    for (int i = 0; i < 5; i++) {
        int cx = array[i][1] - valueX;
        int cy = array[i][2] - valueY;
        // 用double存储距离,避免精度丢失
        double distance = sqrt(cx * cx + cy * cy);
        
        // 更新最小距离和对应ID
        if (distance < minDistance) {
            minDistance = distance;
            closestId = array[i][0];
        }
    }
    
    // 将整数ID转换为对应字符输出
    char idChar;
    switch(closestId) {
        case A: idChar = 'A'; break;
        case B: idChar = 'B'; break;
        case C: idChar = 'C'; break;
        case D: idChar = 'D'; break;
        case E: idChar = 'E'; break;
        default: idChar = '?';
    }
    
    printf("最近的点是ID=%c,距离为%.2lf\n", idChar, minDistance);
    return 0;
}

代码说明

  • 先定义A-E的整数常量,因为C语言数组不能直接存储未定义的标识符;如果想直接存字符,可将数组类型改为char array[5][3],ID部分用单引号包裹(比如{'A', 200, 400})
  • 用double类型存储距离,避免sqrt返回的浮点数被强制转为整数导致精度丢失
  • 遍历过程中实时更新最小距离和对应ID,确保最终得到的是最近点
  • 通过switch把整数ID转换为字符输出,提升结果可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:44:57