现在的位置: 首页 > 综合 > 正文

平面上N个点,每两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点

2013年06月16日 ⁄ 综合 ⁄ 共 577字 ⁄ 字号 评论关闭

平面上N个点,没两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。

先把N个点按x排序。 
斜率k最大值为max(斜率(point[i],point[i+1]))    0 <=i <n-2。 

复杂度Nlog(N)。


#include<iostream> 
#include<algorithm> 
using namespace std; 
void swap(int &a,int &b)
{    
     int tmp = a;
     a = b;
     b = tmp;
} 
void ssort(int x[],int y[],int len)
{
     for( int i=0;i<len-1;i++)
     {
          for(int j=0;j<len-i-1;j++)
          {
                  if(x[j]>x[j+1])
                  {
                                 swap(x[j],x[j+1]);
                                 swap(y[j],y[j+1]);
                  }
          }
     } 
} 
int main()
{
    int x[]={1,6,4,2,3}; 
    int y[]={2,4,6,11,9}; 
    ssort(x,y,5); 
    double max=(y[1]-y[0])/(x[1]-x[0]); 
    for(int i=2;i<5;i++)
    {
            double n = (y[i]-y[i-1])/(x[i]-x[i-1]);
            max = max>n?max:n; 
    } 
    cout<<"max = "<<max<<endl;    
    getchar(); 
    return 0;
}

抱歉!评论已关闭.