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
#includesource#include 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; }#include #define SIZE 100
Tidak ada komentar:
Posting Komentar