
Untitled
By: a guest on
Jun 21st, 2012 | syntax:
None | size: 1.99 KB | hits: 14 | expires: Never
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
const int MAX = 10000;
struct punkt
{
int x;
int y;
};
double w(punkt a, punkt b, punkt c)
{
double ob =(sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2)))+ (sqrt( pow((a.x-c.x),2)+pow((a.y-c.y),2)))+sqrt( pow((c.x-b.x),2)+pow((c.y-b.y),2));
return ob;
}
int main()
{
double k,q,T;
int size;
cout<<"Podaj ilosc wieszcholkow ;"<<endl;
cin>>size;
int n = size-1;
punkt *P = new punkt[size];
double **s = new double * [size];
for (int j=0; j<size; j=j+1){
s[j] = new double[size];
}
double **M= new double * [size];
for (int j=0; j<size; j=j+1){
M[j] = new double[size];
}
cout<<"Podaj wspolrzedne wierzcholkow;"<<endl;
punkt a;
for(int i=0;i<size;i++)
{
cin>>a.x;
cin>>a.y;
P[i]=a;
}
for (int i=1;i<=n;i++)
{
M[i][i] = 0;
}
for (int l=2;l<=n;l++)
{
for (int i=1;i<=n-l+1;i++)
{
int j = i+l-1;
M[i][j] = MAX;
for(int k=i;k<=j-1;k=k+1)
{
q = M[i][k] + M[k+1][j] + w(P[i-1],P[j],P[k]);
if(q<M[i][j])
{
M[i][j]=q ;
s[i][j]=k ;
}
}
}
}
T=M[1][n];
cout<<"Optymalna triangulacja wielokata = "<<T<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}