Advertisement
Infernale

NCTU LAB 12/03 NUM 2

Mar 12th, 2019
435
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double distance(int x1, int y1, int x2, int y2){
  5.     return sqrt(pow((x2-x1),2)+pow((y2-y1),2));
  6. }
  7.  
  8. void mini_peri(double *x, double *y, int len, double *rx, double *ry){
  9.     double dist, currMin = 10e9;
  10.     for(int i=0;i<len-2;i++){
  11.         for(int j=i+1;j<len-1;j++){
  12.             for(int k=j+1;k<len;k++){
  13.                 dist = distance(x[i],y[i],x[j],y[j]) + distance(x[i],y[i],x[k],y[k]) + distance(x[j],y[j],x[k],y[k]);
  14.                 if(dist<currMin){
  15.                     currMin = dist;
  16.                     rx[0] = x[i], ry[0] = y[i];
  17.                     rx[1] = x[j], ry[1] = y[j];
  18.                     rx[2] = x[k], ry[2] = y[k];
  19.                 }
  20.             }
  21.         }
  22.     }
  23. }
  24.  
  25. int main(){
  26.     int n;
  27.     while(scanf("%d", &n)){
  28.         double *x = new double[n], *y = new double[n];
  29.         double *minX = new double[3], *minY = new double[3];
  30.         for(int i=0;i<n;i++){
  31.             scanf("%lf %lf", &x[i], &y[i]);
  32.         }
  33.         mini_peri(x, y, n, minX, minY);
  34.         for(int i=0;i<3;i++){
  35.             printf("(%.1lf,%.1lf)", minX[i], minY[i]);
  36.             if(i!=2){
  37.                 printf(", ");
  38.             }
  39.         }
  40.         delete[] x, y, minX, minY;
  41.     }
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement