输油管道问题
来源:互联网 发布:淘宝网注册支付宝密码 编辑:程序博客网 时间:2024/05/16 00:24
问题描述:
某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?证明可在线性时间内确定主管道的最优位置。
编程任务:
给定n口油井的位置,编程计算各油井到主管道之间的输油管道最小长度总和。
数据输入:
由文件pipe*.in提供输入数据。文件的第1行是油井数n,1n10000。接下来n行是油井的位置,每行2个整数x和y,-10000x,y10000。
结果输出:
程序运行结束时,将计算结果输出到文件pipe*.out中。文件的第1行中的数是油井到主管道之间的输油管道最小长度总和。
输入文件示例 输出文件示例
pipe0.in pipe0.out
5
1 2
2 2
1 3
3 -2
3 3 6
int partition(int a[],int p,int r)
{//快速排序的划分函数
int i,j,x,temp;
i=p;
j=r+1;
x=a[p];
//将<=x的元素换到左边区域
//将>=x的元素换到右边区域
while (1)
{
while (a[++i]<x);
while(a[--j]>x);
if (i>=j)break;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[p]=a[j];
a[j]=x;
return j;
}
int randpartition(int a[],int p,int r)
{//随机划分函数
int i;
i=p+rand()%(r-p+1);//生产随机数
int temp;
temp=a[i];
a[i]=a[p];
a[p]=temp;
return partition(a,p,r);//调用划分函数
}
int randsel(int a[],int p,int r,int k)
{//查找中位数函数
if (p==r)//递归结束,找到中位数
{
return a[p];
}
int i,j;
i=randpartition(a,p,r);//划分
j=i-p+1;
if (k==j)//递归结束,找到中位数
return a[i];
if (k<j)
{
return randsel(a,p,i-1,k);//递归调用,在前面部分查找中位数
}
else
return randsel(a,i+1,r,k-j);//递归调用,在后面部分查找中位数
}
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 输油管道问题
- 南邮-1206-输油管道问题
- 中位数-输油管道问题
- 输油管道问题-分治
- 【a202】&&【9208】输油管道问题
- 输油管道问题 分治算法
- XML卷之实战锦囊(3):动态查询
- web 开发中使用cookie 详解
- XML Webservice实现原理及相关知识
- XML卷之实战锦囊(4):选单连动
- XML卷之实战锦囊(5):结构树图
- 输油管道问题
- Hutchison反重力效应 -事实还是伪造?
- 教你建动态wiki网站
- 使用CTabCtrl控件实现属性页功能-界面类编程-VC
- 复制对象句柄
- 今天又去见客户了
- 哈奇森效应和反重力研究
- 扩充人脉比拿项目乱找VC更为重要
- XML应用