#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條評論
主站蜘蛛池模板: 国产午夜亚洲精品第一区 | 黄色在线免费观看网站 | a毛片久久免费观看 | 一级a美女毛片 | 欧美一级看片a免费视频 | 国产精品亚洲视频 | 99精品国产高清一区二区 | 四虎永久在线精品免费影视 | 久久黄色一级视频 | 四虎最新在线 | 国产精品久久久久久吹潮 | 日韩一级欧美一级毛片在 | 欧美乱子伦一区二区三区 | 成人私人影院www片免费高清 | 在线观看深夜观看网站免费 | 精品国产欧美一区二区 | 男人的天堂在线视频 | 免费爱爱小视频 | 毛片一| 亚洲高清视频网站 | 91一区二区三区四区五区 | 欧美一区二区三区精品 | 天天射天天操天天色 | 亚洲国产精品高清在线一区 | 国产真实偷人视频在线播放 | 成人a视频片在线观看免费 成人a视频在线观看 | 91成年人视频 | 日本免费黄色小视频 | 中文字幕一区二区三区亚洲精品 | 亚洲精品中文字幕乱码一区二区 | 成人国产精品久久久免费 | 老司机午夜视频在线观看 | 日韩一区二区免费看 | 国产一级视频久久 | 国产中文字幕视频 | 亚洲国产成人精品91久久久 | 青青久久国产成人免费网站 | 国产色婷婷精品综合在线手机播放 | 国产一二三区精品 | 不卡高清av手机在线观看 | 精品久久国产老人久久综合 |