Rabu

Program Titik Terdekat


procedure CariDuaTitikTerdekat(input P : SetOfPoint,
                               n : integer,
                               output P1, P2 : Point)
{ Mencari dua buah titik di dalam himpunan P yang jaraknya terdekat.
Masukan: P = himpunan titik, dengan struktur data sebagai berikut
       type Point = record(x : real, y : real)
       type SetOfPoint = array [1..n] of Point
Keluaran: dua buah titik, P1 dan P2 yang jaraknya terdekat.
}
Deklarasi
  d, dmin : real
  i, j : integer

Algoritma:
  dmin¬9999
  for i¬1 to n-1 do
   
    for j¬i+1 to n do
      d¬Ö((Pi.x-Pj.x)2 + ((Pi.y-Pj.y)2)  
      if d < dmin then       { perbarui jarak terdekat }
        dmin¬d
        P1¬Pi  
        P2¬Pj
      endif 
    endfor

  endfor
    

Programnya
#include 
#include 
#include 
#define SIZE 100
using namespace std;

class Point
{
  public :
  int x, y;
};

void closestPair( Point * p, int n, Point &p1, Point &p2 )
{
  float d, dmin;
  int i, j;

  dmin = 9999;
  for ( i = 1; i < n; i++ )
  {
    for ( j = i + 1; j     {
      d = sqrt( pow(( p[i].x - p[j].x ),2) + pow(( p[i].y - p[j].y ),2) );
      if ( d < dmin )
      {
        dmin = d;
        p1 = p[i];
        p2 = p[j];
      }
    }

  }
}

int main(int argc, char *argv[])
{
    int n;
  Point p[SIZE];
  Point p1,p2;
  cout<>n;
  for(int i=1;i<=n;i++){
   cout<<"point "<<i<>p[i].x;
   cout<<"point "<<i<>p[i].y;
  }
  closestPair(p,n, p1, p2);
  cout<  cout<  cout<<endl;
  cout<  cout<
    system("PAUSE");
    return EXIT_SUCCESS;
}

source

Tidak ada komentar:

Posting Komentar