部分需要注意的地方:
1 ,
double ClosestPoints(int psize,int **p,int & ind1,int & ind2);
用return只能返回一個值,因此這里函數(shù)的參數(shù)表中增加了引用類型的變量 &ind1悠菜,&ind2 , 這樣傳進子函數(shù)中的參數(shù)在子函數(shù)中變化的同時,主函數(shù)中也會改變
2 , 不知大小的二維數(shù)組的動態(tài)分配內(nèi)存構建
C++
p = new int *[psize];
for(int i=0;i<psize;i++)
{
p[i] = new int[3];
}
C語言
int **p;
p=(int **)calloc(sizeof(int *),psize);
for(int i=0;i<psize;i++)
{
*(p+i)=(int *)calloc(sizeof(int ),psize);
}
3 , c++的<float.h>頭文件中定義了FLT_MAX這個常量表示float類型的最大值
(其中也記錄了double類型的最值)
而int類型是記錄在<limits.h>頭文件中,
int a=INT_MAX;怜瞒。
完整代碼如下:
#include"iostream"
#include"cmath"
using namespace std;
double ClosestPoints(int psize,int **p,int & ind1,int & ind2);
/*但是用return只能返回一個值鸯屿,因此這里函數(shù)的參數(shù)表中增加了引用類型的變量 &ind1盏档,&ind2
這樣傳進子函數(shù)中的參數(shù)在子函數(shù)中變化的同時,主函數(shù)中也會改變*/
int main()
{
int n,mind;
double z;
int psize;//元素個數(shù)
cout<<"請輸入數(shù)組的大性镆:";
cin>>psize;
int **p; /*在未知數(shù)組大小的時候可以用動態(tài)分配內(nèi)存的方法定義數(shù)組(一維二維均可)
此處為用二級指針指向一個二維數(shù)組*/
p = new int *[psize];
for(int i=0;i<psize;i++)
{
p[i] = new int[3];
} /*到此蜈亩,二維數(shù)組的動態(tài)分配內(nèi)存構建完成*/
for(int i=0;i<psize;i++)
{
cout<<"第"<<i+1<<"個坐標: "<<endl;
cin>>p[i][0]>>p[i][1];
} //輸入坐標值
int ind1=0;
int ind2=0;
z=ClosestPoints(psize,p,ind1,ind2);
cout<<"最近對的最短距離是:"<<sqrt(z)<<endl;
cout<<"分別為:坐標"<<ind1+1<<" 坐標"<<ind2+1<<endl;
return 0;
}
double ClosestPoints(int psize,int **p,int &ind1,int &ind2)
{
double mind=FLT_MAX; /*c++的<float.h>頭文件中定義了FLT_MAX這個常量表示float類型的最大值
(其中也記錄了double類型的最值懦窘,
而int類型是記錄在<limits.h>頭文件中)int a=INT_MAX*/
double dis =0;
for(int i=0;i<=psize-2;i++)
{
for(int j=i+1;j<=psize-1;j++)
{
dis=(p[j][0]-p[i][0])*(p[j][0]-p[i][0])+(p[j][1]-p[i][1])*(p[j][1]-p[i][1]);
if(dis<mind)
{
mind=dis;
ind1=i;
ind2=j;
}
}
}
return mind;
}