#include

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

一維帶權(quán)郵局位置問題(找?guī)?quán)中位數(shù))C++實現(xiàn)

系統(tǒng) 3895 0
帶權(quán)郵局位置問題: 已知n個點p1,p2,...,pn及與它們相聯(lián)系的權(quán)重w1,w2,...,wn。我們希望能找到一點p(不一定是輸入點中的一個),使和式 最小,此處d(a,b)表示點a和點b之間的距離。

對于一維帶權(quán)郵局位置問題即找?guī)?quán)中位數(shù)。如下

// 一維郵局選址問題.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include<ctime>
#include<cmath>
#define N 100
using namespace std;

struct Node
{
double value;
double weight;
};
Node nodes[N];
//產(chǎn)生一個隨即下標,用其對應的數(shù)組元素作為比較標準(即一趟快速的主元)
int random(int m,int n)
{
srand((unsigned)time(NULL));
return m + (rand()%(n-m+1));
}
//一趟快速排序
int qartition(Node *nodes,int begin,int end)
{

int i = begin-1,j=begin;
double x = nodes[end].value;
while(j<end)
{
if(nodes[j].value<=x)
{
i++;
Node temp = nodes[i];
nodes[i]=nodes[j];
nodes[j]=temp;
}
j++;
}
Node temp = nodes[end];
nodes[end]=nodes[i+1];
nodes[i+1]=temp;
return i+1;
}
//一趟隨機化快速排序
int random_qartition(Node *nodes,int begin,int end)
{
int q = random(begin,end);
Node temp = nodes[end];
nodes[end]=nodes[q];
nodes[q]=temp;
return qartition(nodes,begin,end);
}
//隨機化快速排序
void random_fast_sort(Node *nodes,int begin,int end)
{
if(begin<end)
{
int p = random_qartition(nodes,begin,end);
random_fast_sort(nodes,begin,p-1);
random_fast_sort(nodes,p+1,end);
}
}
//得到帶權(quán)的中位數(shù)
Node GetMidWeight(Node *nodes,int begin,int end,double SumWeight)
{
double midSum = 0.0;
int i;
for(i=begin;i<=end;i++)
{
midSum+=nodes[i].weight;
if(midSum>=SumWeight/2)
break;
}
return nodes[i];
}
int _tmain(int argc, _TCHAR* argv[])
{
int cases;
cout<<"請輸入案例個數(shù):"<<endl;
cin>>cases;
while(cases--)
{
cout<<"請輸入數(shù)據(jù)個數(shù):"<<endl;
int n;
cin>>n;
int i;
double sum = 0.0;
cout<<"請輸入每一點值和其權(quán)值"<<endl;
for(i=0;i<n;i++)
{
cin>>nodes[i].value>>nodes[i].weight;
sum+=nodes[i].weight;
}
random_fast_sort(nodes,0,n-1);
cout<<"郵局位置為:"<<endl;
Node node = GetMidWeight(nodes,0,n-1,sum);
cout<<node.value<<endl;
cout<<"總代價為:"<<endl;
double sumValue = 0.0;
for(i=0;i<n;i++)
{
sumValue+=abs(nodes[i].value-node.value);
}
cout<<sumValue<<endl;
}
system("pause");
return 0;
}

<wbr><wbr><wbr>找出二維帶權(quán)郵局位置問題的最佳解答,其中所有的點都是(x,y)坐標對,并且點a(x1,y1)與點b(x2,y2)之間的距離是Manhattan距離:d(a,b)=|x1-x2|+|y1-y2|。</wbr></wbr></wbr>

對于二維帶權(quán)郵局位置問題可以轉(zhuǎn)化為一維郵局位置問題,分別求x、y的帶權(quán)中位數(shù)。見下篇《二維帶權(quán)郵局位置問題》

一維帶權(quán)郵局位置問題(找?guī)?quán)中位數(shù))C++實現(xiàn)


更多文章、技術(shù)交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 曰本人一级毛片免费完整视频 | 五月婷花 | 久久性 | 九九九九热精品免费视频 | 99热久久国产精品这 | 欧美日韩中文字幕 | 四虎永久在线精品影院 | 激情在线播放免费视频高清 | 亚洲一区二区成人 | 国产精品久久国产精麻豆99网站 | 一区二区三区四区视频在线观看 | 91福利在线观看 | 久操免费在线观看 | 亚洲精品国产字幕久久不卡 | 久久国产亚洲 | 国产伦精品一区二区三区免费观看 | 成人亚洲国产 | 我爱avav| 成人精品久久 | 成人网在线免费观看 | 狠狠色丁香婷婷综合久久来 | 九九影院 影片 | 久久这里有精品视频 | 久久―日本道色综合久久 | 久久er热在这里只有精品85 | 日本在线视频毛片 | 亚洲免费视频在线 | 欧美日韩亚洲一区二区三区 | 91成人影院未满十八勿入 | 色资源网站 | a一级黄| 久久精品视频免费 | 精品国产一区二区三区不卡在线 | 国产综合久久久久 | 天天做天天爱天天综合网 | 99热这里只有精品首页 | 在线精品国精品国产不卡 | 婷婷热| 爱爱免费播放视频在线观看 | 久久精品国产99国产精品免费看 | 中文字幕欧美一区 |