Tìm điểm Fermat (Thuật toán leo đồi)
// tim diem fermat
#include<bits/stdc++.h>
using namespace std;
typedef pair<double,double> diem;
#define x first
#define y second
double kc(diem A, diem B){
A.x-=B.x; A.y-=B.y;
return sqrt(A.x*A.x + A.y*A.y);
}
int main()
{
diem A, B, C, M;
cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y;
M={(A.x+B.x+C.x)/3, (A.y+B.y+C.y)/3};
double eps = 1e-4, k = kc(A, M)+ kc(B, M) + kc(C, M), d = 10;
while(d>eps){
diem Next[]={{M.x-d, M.y},{M.x+d, M.y},{M.x, M.y-d},{M.x, M.y+d}};
for(diem N:Next){
double z=kc(A, N)+ kc(B, N) + kc(C, N);
if(z<k){
k=z;
M=N;
d=d*2;
break;
}
d/=2;
}
}
cout<<k;
}