#include <iostream>
#include<cmath>
#include <iomanip>
using namespace std;
double compare(double arr[],int len,int *num);//定义一个函数用于返回两个值,min和num
int main()
{
int d, n;
double dis;
while (cin >> d >> n)//多组输入,维度d和基向量个数n
{
double* p = new double[d];//申请两个数组的动态内存
double* q = new double[d];
for (int i = 0; i < d; i++)
{
cin >> p[i];//数组p用于储存目标向量
}
double arr[100];//定义一个数组用于收集计算出的距离
for (int j = 0; j < n; j++)
{
double sum = 0;
for (int k = 0; k < d; k++)
{
cin >> q[k];//数组q用于储存基向量
sum = sum + pow((q[k] - p[k]), 2);//计算差的平方和
}
dis = sqrt(sum);//平方和开根
arr[j] = dis;//将结果储存在数组arr中
}
int num;
double min;
min = compare(arr, n, &num);//调用函数,返回最小值以及对于的序号
cout.setf(ios::fixed);//该函数用于确定小数点后显示的位数
cout << num << " " << setprecision(2)<<min << endl;//输出
delete[]p;
delete[]q;//释放内存
}
return 0;
}
double compare(double arr[],int len,int *num)
{
double min = arr[0];
for (int j = 0; j < len; j++)
{
if (arr[j] < min)
{
min = arr[j];
*num = j;//指针指向最小值对应的序号
}
}
return min;
}
求解最近邻基向量
最新推荐文章于 2024-10-05 12:07:50 发布
这是一个C++程序,用于处理多组数据,计算目标向量与一组基向量之间的欧几里得距离,并找出最小距离。程序通过动态内存分配,读取输入的维度和基向量,计算每个基向量与目标向量的平方和,然后求平方和的平方根得到距离。最后,找到最小距离并输出其对应的序号和值。
摘要由CSDN通过智能技术生成