c# 在结构数组中仅查找一次对

cygmwpex  于 2022-11-20  发布在  C#
关注(0)|答案(2)|浏览(167)

我有一个结构体和一个结构体数组,类似于:

struct point{
    double x;
    double y;
    char name[10];
};
struct point points[1000];

我创建了一个算法,计算所有点之间的距离,并打印距离最小的点对,如下所示:

int count = 0;
    for (int i = 0; i < 1000; i++){
        for(int j = 0; j < 1000; j++){
            if(i != j){
                double distance = sqrt(pow(points[i].x - points[j].x, 2) + pow(points[i].y - points[j].y, 2));
                if(distance == min){
                    printf("%s - %s\n", points[i].name, points[j].name);
                    count++;
                }
            }
        }
    }

如果有多个具有相同距离的结构对,它会打印所有这些结构对,但会打印两次(第二次以不同的顺序打印),那么打印循环中的理想逻辑门是什么,以防止具有相同距离的结构被打印两次?

ubbxdtey

ubbxdtey1#

更改为:

for (int i = 0; i < 999; i++){
    for(int j = i+1; j < 1000; j++){
        double distance = sqrt(pow(points[i].x - points[j].x, 2) + pow(points[i].y - points[j].y, 2));
        if(distance == min){
            printf("%s - %s\n", points[i].name, points[j].name);
            count++;
        }
    }
}

我更改了i和j的间隔,并删除了if语句。

vjrehmav

vjrehmav2#

而不是像这样循环:

for(int i = 0; i < 1000; i++){
    struct point a = points[i]
    for(int j = 0; j < 1000; j++){
        struct point b = points[j]
    }
}

尝试这样做,以便每个点只循环一次

for(int i = 0; i < 999; i++){
    struct point a = points[i]
    for(int j = i; j < 1000; j++){
        struct point b = points[j]
    }
}

相关问题