演算法設計練習作業,郵局選址問題,將自己寫的分享,有問題請指正,希望共同學習。
關於郵局選址問題的理論知識就不贅述了,網上有講解的。
#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個元素的帶權中位數 先用堆排...