最近对问题(蛮力法、分治法)

这篇博客介绍了如何计算点对之间的最短距离,分别探讨了蛮力法和分治法两种策略。文章通过详细讲解并提供修改后的代码,展示如何在算法中增加数组以输出最短点对。
摘要由CSDN通过智能技术生成

输入:点对个数, 点对的数值

输出:点对之间的最短距离

一、蛮力法

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define MAX 99999
using namespace std;
double closestPoints(double x[],double y[],int n)
{
    double x1,x2,y1,y2;                      //记录下标
    double dist,minDist=MAX;
    for(int i=0; i<n; i++)
        for(int j=i+1; j<n; j++)
        {
            dist=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);       //计算距离
            if(dist<minDist)
            {
                minDist=dist;
                x1=x[i];
                y1=y[i];
                x2=x[j];
                y2=y[j];
            }
        }
    cout<<"最近的点对为:("<<x1<<","<<y1<<")-("<<x2<<","<<y2<<")"<<endl;      //输出坐标
    return minDist;
}

int main()
{
    double x[100],y[100];
    double minDist;
    int n;
    cout<<"输入点的个数:\n";
    cin>>n;
    cout<<"输入点集的坐标:\n";
    for(int i=0; i<n; i++)
        cin>>x[i]>>y[i];
    minDist=closestPoints(x,y,n);
    cout<<"其距离为:"<<sqrt(minDist);
    return 0;
}

二、分治法

#include<iostream>
#include<cstdio
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值