c - 如何编写以矩阵形式计算欧几里得距离的 c 程序?
问题描述
从用户那里获取笛卡尔坐标系(P0、P1、P2、P3、P4)中5个点的X和Y坐标并将它们放在一个数组中(不是两个数组,当然在一个数组中)我想编写一个程序,将其放入二维欧几里德距离数组中,如下所示。
Array of coordinates (vector with 10 elements)
X0 Y0 X1 Y1 X2 Y2 X3 Y3 X4 Y4
Euclidean distance array (matrix in 5x5 form)
P1 -> P0 Distance
P2 -> P0 Distance P2 -> P1 Distance
P3 -> P0 Distance P3 -> P1 Distance P3 -> P2 Distance
P4 -> P0 Distance P4 -> P1 Distance P4 -> P2 Distance P4 -> P3 Distance
对于数字 1 到 10,我只是得到这个打印输出。
1 2 3 4 5 6 7 8 9 10
我的代码
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main() {
int k[5][2],s[5][2];
int i=0,j=0,p=0,z=0,x1,x2,y1,y2;
for(i=0;i<5;i++){
for(j=0;j<2;j++){
printf("enter coordinates");
scanf("%d",&k[i][j]);
}
}
for(i=0;i<5;i++){
for(j=0;j<2;j++){
printf("%d\t",k[i][j]);
}
}
return 0;
}
解决方案
要计算距离:
int getDistance (int x1, int y1, int x2, int y2)
{
double distance = pow(x2 - x1, 2) + pow(y2 - y1, 2);
distance = sqrt(distance);
return (int)distance;
}
使用嵌套循环填充距离数组:
int distances [5][5];
for (i = 0; i < 5; i++) //rows
{
for (j = 0; j < 5; j++) //cols
{
distances[i][j] = getDistance(k[i][0], k[i][1], k[j][0], k[j][1]);
}
}
和另一个嵌套循环打印距离数组:
for (i = 0; i < 5; i++) //rows
{
for (j = 0; j < 5; j++) //cols
{
printf("%d ", distances[i][j]);
}
printf("\n");
}
完整代码:
#include <stdio.h>
#include <conio.h>
#include <math.h>
int getDistance (int x1, int y1, int x2, int y2)
{
double distance = pow(x2 - x1, 2) + pow(y2 - y1, 2);
distance = sqrt(distance);
return (int)distance;
}
int main() {
int k[5][2],s[5][2];
int i=0,j=0,p=0,z=0,x1,x2,y1,y2;
for(i=0;i<5;i++){
for(j=0;j<2;j++){
printf("enter coordinates");
scanf("%d",&k[i][j]);
}
}
//populate array
int distances [5][5];
for (i = 0; i < 5; i++) //rows
{
for (j = 0; j < 5; j++) //cols
{
distances[i][j] = getDistance(k[i][0], k[i][1], k[j][0], k[j][1]);
}
}
//print distances
for (i = 0; i < 5; i++) //rows
{
for (j = 0; j < 5; j++) //cols
{
printf("%d ", distances[i][j]);
}
printf("\n");
}
for(i=0;i<5;i++){
for(j=0;j<2;j++){
printf("%d\t",k[i][j]);
}
printf("\n");
}
return 0;
}
结果:
0 2 5 8 11
2 0 2 5 8
5 2 0 2 5
8 5 2 0 2
11 8 5 2 0
推荐阅读
- swift - 运行 Kitura Docker Image 导致 libmysqlclient.so.18 错误
- c# - 如何在包含数字 1 的每一行中将数字加 1
- rust - 为动态加载的 crate 提供一致的 TypeId
- elasticsearch - elasticsearch批量加载性能问题
- r - R中的页面功能
- javascript - 为什么我不断收到 $(...).scrollSpy 未定义?
- flutter - 如何使用 Flutter 实现类似 ios 虚拟主页按钮的按钮
- qt5 - VLC 构建系统找不到 Qt5
- encoding - 如何使用 LispWorks 正确检测文件编码?
- nlp - 使用 word2vec 聚类相似词