CC++Java解决最近对问题

    科技2024-06-23  68

    最近对问题: 最近对问题要求在一个包含n个点的集合中找出距离最近的两个点。严格地讲,距离最近的点可能多于一个,简单起见,只找出其中的一对即可。 C实现

    #include<stdio.h> int ClosestPoints(int x[], int y[], int n) { int index1,index2; int d,minDist=1000; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { d=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); if(d<minDist) { minDist=d; index1=i; index2=j; } } printf("最近的点对是:%d和%d\n",index1,index2); return minDist; } int main() { int x[1000],y[1000]; int n,i; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&x[i]); scanf("%d",&y[i]); } ClosestPoints(x,y,n); return 0; }

    C++实现

    #include<iostream> using namespace std; int ClosestPoints(int x[],int y[],int n) { int index1,index2; int d,minDist=1000; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { d=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); if(d<minDist) { minDist=d; index1=i; index2=j; } } cout<<"最近的点对是:"<<index1<<"和"<<index2<<endl; return minDist; } int main() { int x[1000],y[1000]; int n; cin>>n; for(int i=0;i<n;i++) cin>>x[i]>>y[i]; int shortest=ClosestPoints(x,y,n); cout<<shortest<<endl; }

    Java实现

    import java.util.*; public class ClosestPoints { static int ClosestPoints(int x[],int y[],int n) //用static修饰静态成员函数,可以通过函数名访问 { int index1 = -1,index2=-1; //java不会为局部变量赋初值,C/C++会为局部变量赋初值0 int d,minDist=1000; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { d=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); if(d<minDist) { minDist=d; index1=i; index2=j; } } System.out.println("最近的点对是:"+index1+"和"+index2); return minDist; } public static void main(String[] args) { int x[]=new int [1000]; int y[]=new int [1000]; int n,i; Scanner in=new Scanner(System.in); //需要写import java.util.*; n=in.nextInt(); for(i=0;i<n;i++) { x[i]=in.nextInt(); y[i]=in.nextInt(); } ClosestPoints(x,y,n); } }
    Processed: 0.009, SQL: 8