#include

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

一維帶權郵局位置問題(找帶權中位數)C++實現

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

對于一維帶權郵局位置問題即找帶權中位數。如下

// 一維郵局選址問題.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];
//產生一個隨即下標,用其對應的數組元素作為比較標準(即一趟快速的主元)
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);
}
}
//得到帶權的中位數
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<<"請輸入案例個數:"<<endl;
cin>>cases;
while(cases--)
{
cout<<"請輸入數據個數:"<<endl;
int n;
cin>>n;
int i;
double sum = 0.0;
cout<<"請輸入每一點值和其權值"<<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>找出二維帶權郵局位置問題的最佳解答,其中所有的點都是(x,y)坐標對,并且點a(x1,y1)與點b(x2,y2)之間的距離是Manhattan距離:d(a,b)=|x1-x2|+|y1-y2|。</wbr></wbr></wbr>

對于二維帶權郵局位置問題可以轉化為一維郵局位置問題,分別求x、y的帶權中位數。見下篇《二維帶權郵局位置問題》

一維帶權郵局位置問題(找帶權中位數)C++實現


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 人成午夜免费大片在线观看 | 狠狠操夜夜爽 | 欧美在线一级片 | 青青青青爽视频在线播放 | 亚洲网在线观看 | 一级午夜 | 黄色毛片毛茸茸 | 国产精品视频偷伦精品视频 | 国产成人精品男人免费 | 一区二区手机视频 | 亚洲综合激情视频 | 亚洲成在人线久久综合 | 视频一区二区三区在线观看 | 成人免费黄色片 | 色老头xxxxbbbb视频 | 欧美一区二区久久精品 | 欧美成人猛男性色生活 | 午夜精品久久久久 | 亚洲综合免费 | 一区二区三区在线视频观看 | 国产视频一二 | 综合久久色 | 免费的拍拍视频在线观看 | 日本韩国欧美在线观看 | 天天久久狠狠伊人第一麻豆 | 国产精品日本一区二区不卡视频 | 天天干国产 | 国产在线观看中文字幕 | 色在线视频 | 快射视频欧美 | 成人影院免费观看 | 色激情综合 | 欧美一区二区在线免费观看 | 变态 调教 视频 国产九色 | 欧美成人免费视频a | 成人黄色在线 | 按摩毛片| 久久精品国产精品2020 | 免费在线亚洲 | 9l国产精品久久久久麻豆 | 久久久久亚洲香蕉网 |