C++ 算法:求点集最小距离 - 最近点对问题
#include<bits/stdtr1c++.h>
using namespace std;
inline static const nullptr_t _={ios_base::sync_with_stdio(0);cin.tie(nullptr),cout.tie(nullptr);return nullptr;}();
int n;pair<double,double> a;double mindis=numeric_limits
import ( "fmt" "math" "sort" )
type pair struct { first float64 second float64 }
func dist(a, b pair) float64 { return math.Sqrt((a.first-b.first)(a.first-b.first) + (a.second-b.second)(a.second-b.second)) }
func main() { var n int fmt.Scan(&n) a := make([]pair, n) for i := 0; i < n; i++ { fmt.Scan(&a[i].first, &a[i].second) } sort.SliceStable(a, func(i, j int) bool { return a[i].first < a[j].first || (a[i].first == a[j].first && a[i].second < a[j].second) }) mindis := math.Inf(1) for i := 1; i < n; i++ { mindis = math.Min(mindis, dist(a[i], a[i-1])) } sort.SliceStable(a, func(i, j int) bool { return a[i].second < a[j].second || (a[i].second == a[j].second && a[i].first < a[j].first) }) for i := 1; i < n; i++ { mindis = math.Min(mindis, dist(a[i], a[i-1])) } fmt.Printf("%.4f\n", mindis) }
原文地址: https://www.cveoy.top/t/topic/pP8W 著作权归作者所有。请勿转载和采集!