如何从二维数组中查找最近坐标点?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} };
对应的点信息表格:
| ID | X | Y |
|---|---|---|
| A | 200 | 400 |
| B | 300 | 600 |
| C | 100 | 200 |
| D | 300 | 100 |
| E | 200 | 400 |
现有目标坐标 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)。
实现思路
- 初始化变量记录当前最小距离和对应点ID
- 遍历数组每一行,计算当前点到目标点的欧氏距离
- 对比当前距离与最小距离,若更小则更新最小距离和对应ID
- 遍历结束后输出最近点信息
完整代码实现
#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
相关产品推荐
相关产品推荐

