二維郵局選址問題 帶權中位數

2021-06-13 01:09:20 字數 1101 閱讀 1206

演算法設計練習作業,郵局選址問題,將自己寫的分享,有問題請指正,希望共同學習。

關於郵局選址問題的理論知識就不贅述了,網上有講解的。

#include #include #include using namespace std;

/* *郵局選址問題,帶權中位數

*輸入的座標不能相同,即x或y各自是n個不同的數,該程式為不同的整型數

*輸入在檔案input中,第一行為居民點個數,剩下行為(x,y,w)對,用空格分割

*輸出檔案為output,包括郵局座標,帶權的最短距離和

*/int partition(int a,float w,int p,int r);

int partition2(int a,float w,int p,int r,int z);

void quicksort(int a,float w,int p,int r);

int select(int a,float w,int p,int r,int k);

int cut(int a,float w,int p,int r,int z) ;

int t=0;//外部變數,儲存上一次劃分得到的下標

int main()

xk=select(ax,awx,0,count-1,(count+1)/2);//計算xk,yk

yk=select(ay,awy,0,count-1,(count+1)/2);

for(i=0;i=0.5,則對xk左邊的陣列元素遞迴呼叫select函式,否則對xk右邊的陣列元素遞迴呼叫select函式

*/int select(int a,float w,int p,int r,int k)

else

}for (int i=0;i<(r-p+1)/5;i++)//分組排序,將中位數交換到陣列前端

int x=select(a,w,p,p+(r-p+1)/5-1,(((r-p+1)/5)+1)/2);//中位數的中位數

i=partition2(a,w,p,r,x);//計算x前半區元素個數

int j=i-p+1;

for(int m=t;m=0.5)

else

}

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

帶權郵局位置問題 已知n個點p1,p2,pn及與它們相聯絡的權重w1,w2,wn。我們希望能找到一點p 不一定是輸入點中的乙個 使和式 最小,此處d a,b 表示點a和點b之間的距離。對於一維帶權郵局位置問題即找帶權中位數。如下 struct node node nodes n 產生乙個隨即下標,用...

中位數及帶權中位數問題

資訊學競賽總是時不時與數學產生微妙的關係,中位數及帶權中位數問題有時常常成為解題的關鍵,今日有時間,所以梳理一下。先從一到簡單的題看起 士兵站隊問題 在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上。網格點由整數座標 x,y 表示。士兵們可以沿網格邊上 下 左 右移動一步,但在同一時刻任一網格點...

演算法研究 帶權中位數問題

1 對於x1,x2,xn的中位數即各xi的帶權中位數,此處權值wi 1 n,i 1,2.n 此時x1,x2.xn的中位數為xk,k n 1 2 則x1,x2.x k 1 的權值和為 n 1 2 n n 1 2n 1 2 2 通過排序,在o nlgn 的最壞情況時間內求出n個元素的帶權中位數 先用堆排...