输油管道问题(分治策略)

输油管道问题

问题描述:
输油管道问题(分治策略)_第1张图片
思路:确定输油主干道的纵坐标,因为是东西走向,用前面用到的选择问题求中位数也就是主干道的纵坐标,然后用到在这里插入图片描述求出最小的总和`
以下是代码

 //select代码注释在选择问题中给出了解释 
 #include 
 
  int a[50];
  
  int select(int left,int right,int k)
  {
    if( left >= right )    return a[left];
    
    int x = a[left];
    
    int i = left;
    
    int j = right+1;
    
    while( true )
	{
        do{
            i++;
         }while(a[i]x);
         
        if( i>=j )   break ;
        std::swap(a[i],a[j]);
     }
     
     if( j-left+1 == k )    return x;
     
     a[left] = a[j];
     
     a[j] = x;
     
     if( j-left+1 < k )
         return select(j+1,right,k-j+left-1);
    else
         return select(left,j-1,k); 
   }
 
 	int  main()
	{
		int x;
		int y;
		int n;
		scanf("%d",&n);
		
		for(int i=0; i

以下是程序运行结果:
输油管道问题(分治策略)_第2张图片

你可能感兴趣的:(算法设计与分析)