📄 重心法选址的c++实现.htm
字号:
<!--STATUS OK--><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>重心法选址的C++编程问题,请高手赐教_百度知道 </title><link rel="alternate" type="application/rss+xml" title="“重心法选址的C++编程问题,请高手赐教”的最新回答(RSS 2.0)" href="http://zhidao.baidu.com/q?ct=20&qid=48278606&pn=65535&rn=25&tn=rssqb"><link href="/ikqb.css?223" rel="stylesheet" type="text/css"></head><body><script type="text/javascript" src="/userlogin.js?223"></script> <div id="usrbar"><nobr><script language="JavaScript">document.write('<a href="http://www.baidu.com/">百度首页</a> | <a href="http://zhidao.baidu.com" id="my_home" target="_blank">百度知道</a> | <a href="#" onclick="userLogin(TopLoginSuccess, TopLoginFail,\'login\');" id="log_in">登录</a>');</script></nobr></div><div id="tip_holder"><div id="tip"><div id="tip_top" class="right_arrow"></div><div id="tip_con"><a href="#" target="_blank" id="tip_url1"><img width="32" height="32" border="0" id="tip_icon"></a><img src="http://img.baidu.com/hi/img/mfu/close.gif" width="11" height="11" id="tip_close" alt="关闭"><dl><dt id="tip_title"></dt><dd id="tip_txt"></dd><dd id="tip_detail"><a href="#" target="_blank" id="tip_url2"></a></dd></dl></div></div></div><script type="text/javascript" src="/bubble_data.js"></script> <table width="750" border="0" cellspacing="0" cellpadding="0" class="hd"><tr>
<td width="146" valign="top"><a href="/"><img src="http://img.baidu.com/img/logo-zhidao.gif" border="0" alt="百度知道" width="137" height="46" vspace="3"></a></td>
<td><div id="tab" style="font-size:14px;"><a href="http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2&t=1" class="headTit">新闻</a> <a href="http://www.baidu.com/s?cl=3&wd=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2" class="headTit">网页</a> <a class="headTit" href="http://tieba.baidu.com/f?kw=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2&t=4">贴吧</a> <font class="headTitB">知道</font> <a class="headTit" href="http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&word=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2&t=2">MP3</a> <a class="headTit" href="http://image.baidu.com/i?tn=baiduimage&ct=201326592&lm=-1&cl=2&word=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2&t=3">图片</a> <a class="headTit" href="http://video.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=22&word=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2">视频</a> <a class="headTit" href="http://baike.baidu.com/w?ct=17&lm=0&tn=baiduWikiSearch&pn=0&rn=10&word=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2">百科</a></div>
<form action="/q" name="ftop" method="get">
<table border="0" cellspacing="0" cellpadding="0"><tr>
<td nowrap> <input class=hdi maxlength=256 tabindex=1 size=42 name=word value="重心法 选址问题"> </td><td><a href="http://www.baidu.com/search/zhidao_help.html">帮助</a></td></tr></table>
<div style="margin-top:4px"> <input type="hidden" name="ct" value="17"> <input type="hidden" name="pn" value="0"> <input type="hidden" name="tn" value="ikaslist"> <input type="hidden" name="rn" value="10"> <input type="hidden" name="lm" value="0" autocomplete = 'off' /> <input type="hidden" name="fr" value="search" autocomplete = 'off' /> <input type="submit" tabindex=2 value="搜索答案" class="bnsrh"> <input type="button" onclick="NewAskTop()" style="margin:0 8px" tabindex=3 value="我要提问" class="bnsrh" /> <input type="button" class="bnsrh" tabindex=4 value="我要回答" onclick='newQuestionSearch()'/></div>
</form>
<form name="fask" action="/q" method="get"> <input type="hidden" name="ct" value="17"><input type="hidden" name="pn" value="0"><input type="hidden" name="tn" value="ikask"><input type="hidden" name="rn" value="10"><input type="hidden" name="word" value=""> <input type="hidden" name="cm" value="1"><input type="hidden" name="lm" value="394496"><input type="hidden" name="qf" value="1">
</form>
</td></tr>
</table><script>document.domain="baidu.com";var url = escape(location.href);if(!G){function G(A){if(typeof (A)=="string"){return document.getElementById(A)}return A}}function ctlSubmit(A){if(A.ctrlKey&&A.keyCode==13){replyFormInit.onSubmit()}}function lockButton(A){A=G(A);A.disabled=true;setTimeout(function(){A.disabled=false},3000)}function cReply(A){if(A=="yes"){G("replyTB").style.display="";document.myform.co.focus()}if(A=="no"){G("replyTB").style.display="none"}}function fixReply(A){setTimeout("cReply('"+A+"')",300)}function showcpro(A){G("cproshow").innerHTML=A}function ga(B,A){if(document.getElementById){a=B.id.substring(1);p="";r="";g=A.target;if(g){t=g.id;f=g.parentNode;if(f){p=f.id;h=f.parentNode;if(h){r=h.id}}}else{h=A.srcElement;f=h.parentNode;if(f){p=f.id}t=h.id}if(t==a||p==a||r==a){return true}window.open(G(a).href,"_blank")}}function ss(A){window.status=A;return true}function cs(){window.status=""}var query=(function(){var D=document.forms.ftop;var B=D.word.value;if(B.length>0){D.word.focus();if(document.all){var C=D.word.createTextRange();C.select();C.collapse(false);C.select()}D.onsubmit=function(){function E(F){var H=document.createElement("input");H.type="hidden";H.name="qf";H.value="baidu"+(F?"1":"0");return H}document.forms.ftop.appendChild(E(query.isChanged()));return true}}function A(){if(B==""){return false}return B!=document.forms.ftop.word.value}return{q:B,isChanged:A}})();function statFunc(B){var A=new Image();A.src="/stat?tn=ikqb&"+B+"&t="+(new Date()).getTime()}function voteAnswer(A){document.forms.voteForm.rid.value=A;document.forms.voteForm.submit()};</script><div id="main"><!--[if IE]>
<script language="JavaScript">
var objmain = document.getElementById("main");
function updatesize(){
var bodyw = window.document.body.offsetWidth;
var w=(bodyw>=1000?"976px":(bodyw<=780?"760px":"100%"));
objmain.style.width=w;
}
updatesize();
window.onresize = updatesize;
</script>
<![endif]--><div style="margin:10px 0 0 0;text-align:left;width:100%;overflow:hidden;"> <script>if(!g_f_js){var g_f_js=true;document.write('<script src=\'http://eiv.baidu.com/other/ff.js\'></'+'script>');}</script>
<script>if (typeof(cf)=="function") {cf("http://eiv.baidu.com/mc_files/20090227/20090227190856_92834900T1T396485.swf","760","90","http://ma.baidu.com/ma/rcv/click.php?t=uv-b5HDhTv-b5Hc1PH6sFMIGujYkFhVGujYkFhqsULnqniuhUWdGpv4EIzudThsqpZwYTaR1fiRzwBRzwh9GQhF9pywdQhPEUiRzwhFbXAGbFHFAmhkEuzRzwh-YuyY-nbmkrj64mvfdrHczm1Dsm1FbnWb1PAmsuhn8pZwVUau1UWYLniu15yP9PAfsnAwWrynznWm4mHDhTMKET1YkFhwY5y4cm17fNdFnRjDvnd0s","0");}</script>
</div><div id="path"><a href="/">百度知道</a> > <cc><a href="/browse/74?lm=2">电脑/网络</a> > <a href="/browse/868?lm=2">VC++</a></cc></div><div id="content"><div id="content_inner"> <div class="mb12 bai"><div class="rg_1"></div><div class="rg_2"></div><div class="rg_3"></div><div class="rg"><div class="t1" id="question_status"><span style="float:right;padding-right:10px;font-size:12px;font-weight:normal;margin-top:-1px;"><span class="ico"><span class="irelate"> </span></span><a href="#irelatelink" class="lbk">相关问题</a></span><span style="width:100px;float:right;font-size:12px;font-weight:normal"><div class="icosc"></div> <a href="http://cang.baidu.com/do/add" onClick="window.open('http://cang.baidu.com/do/add?it='+encodeURIComponent(document.title)+'&iu='+encodeURIComponent(location.href)+'&tn=%E7%9F%A5%E9%81%93%E9%97%AE%E9%A2%98%2C&fr=ik#nw=1','_s','scrollbars=no,width=600,height=450,right=75,top=20,status=no,resizable=yes'); return false;" target="_blank" class="lbk">添加到搜藏</a></span><div class="ico"><div class="iok"></div></div>已解决 </div><div class="bc0"><div class="p90"><div class="f14 B wr" id="question_title"> <cq>重心法选址的C++编程问题,请高手赐教</cq></div><div class="wr" id="question_info"><span class="red"><img src="http://img.baidu.com/img/iknow/icn_point.gif" width="16" height="16" align="absmiddle"> 悬赏分:100</span> - <span class="gray">解决时间:2008-3-18 21:27</span></div><div class="f14 wr" id="question_content"><cd>#include <iostream.h>
<br>#include <math.h>
<br>#include <stdlib.h>
<br>void main()
<br>{
<br> int n;
<br> float *X,*Y,*V,*R;
<br> cout<<"请输入结点个数:";
<br> cin>>n;
<br> X=new float[n];
<br> Y=new float[n];
<br> V=new float[n];
<br> R=new float[n];
<br> cout<<"请输入各结点的横坐标:";
<br> for (int i=0;i<n;i++)
<br> cin>>X[i];
<br> cout<<"请输入各结点的纵坐标:";
<br> for (i=0;i<n;i++)
<br> cin>>Y[i];
<br> cout<<"请输入各结点的供货量或需求量:";
<br> for (i=0;i<n;i++)
<br> cin>>V[i];
<br> cout<<"请输入各结点的内/外向运输费率:";
<br> for (i=0;i<n;i++)
<br> cin>>R[i];
<br> float sumx=0.0,sumy=0.0,sumqr=0.0;
<br> float avex,avey;
<br> for (i=0;i<n;i++)
<br> {
<br> sumx+=V[i]*R[i]*X[i];
<br> sumy+=V[i]*R[i]*Y[i];
<br> sumqr+=V[i]*R[i];
<br> }
<br> avex=sumx/sumqr;
<br> avey=sumy/sumqr;
<br> cout<<"初始仓库地址为:"<<"X="<<avex<<' '<<"Y="<<avey<<endl;
<br> float *d;
<br> d=new float[i];
<br> float xzsumx=0.0,xzsumy=0.0,xzsumqr=0.0; //xz表示修正
<br> float xzavex,xzavey;
<br> int j=0;
<br> while (1)
<br> {
<br> for (i=0;i<n;i++)
<br> d[i]=sqrt((avex-X[i])*(avex-X[i])+(avey-Y[i])*(avey-Y[i]));
<br> for (i=0;i<n;i++)
<br> {
<br> xzsumx+=V[i]*R[i]*X[i]/d[i];
<br> xzsumy+=V[i]*R[i]*Y[i]/d[i];
<br> xzsumqr+=V[i]*R[i]/d[i];
<br> }
<br> xzavex=xzsumx/xzsumqr;
<br> xzavey=xzsumy/xzsumqr;
<br> if (j==50)
<br> break;
<br> else
<br> {
<br> cout<<"第"<<j+1<<"次迭代:"<<"tempX="<<xzavex<<' '<<"tempY="<<xzavey<<endl;
<br> avex=xzavex;
<br> avex=xzavey;
<br> xzsumx=0.0;
<br> xzsumy=0.0;
<br> xzsumqr=0.0;
<br> j++;
<br> }
<br> }
<br> cout<<"仓库最佳地址为:"<<"X="<<xzavex<<' '<<"Y="<<xzavey<<endl;
<br>}</cd></div><div class="f14 wr" id="question_sup"><b>问题补充:</b>对不起,发的时候忘记写了:
<br>这个程序运行结果有误,是在后面的迭代部分,请大家看一看错误在哪里</div></div> <div align="right" class="gray wr" id="question_author">提问者: <a href="http://passport.baidu.com/?business&aid=6&un=yzyz3770#2" target="_blank" >yzyz3770</a> - <a href="http://www.baidu.com/search/zhidao_help.html#n5" target=_blank>经理 四级</a> </div></div></div><div class="rg_4"></div><div class="rg_5"></div><div class="rg_1"></div></div><div class="mb12 bai"><div class="rr_1"></div><div class="rr_2"></div><div class="rr_3"></div><div class="rr"><div class="t1"><div class="ico"><div class="ibest"></div></div>最佳答案</div><div class="bc0" style="padding:5px 0pt;"><div class="wr"> <div class="f14 p90 pl10" id="best_answer_content"> <ca>据我所知:
<br>公式:x0 = ( ∑ xiwi ) / ( ∑ wi )
<br> y0 = ( ∑ yiwi ) / ( ∑ wi )
<br>单设施选址模型有不同的名称,如:精确重心法、网格法和重心法等,因为选址因素只包括运输费率和该点的货物运输量,所以此方法较为简单。
<br>我们以预计仓库点位到达各个目的点位的成本最低为考察目标:
<br>即:
<br> Min TC=∑ViRidi i 遍历所有目的地 …(0)
<br> 其中: TC——总运输成本;
<br> Vi——i 点运输量;
<br> Ri——到 i 点的运输费率;
<br> di——从待定仓库位置到i 点的距离。
<br>在坐标平面中设待定仓库坐标为(X0,Y0)
<br> ∑ViRiXi/di
<br>X0= ...(1)
<br> ∑ViRi/di
<br> ∑ViRiYi/di
<br>Y0= …(2)
<br> ∑ViRi/di
<br> 其中di可以坐标间公式
<br> di =SQR((X0-Xi)2+(Y0-Yi)2) …(3)
<br>
<br>该方法求解过程:
<br> 1、确定各目的地点的坐标,同时确定各点货物运输量和直线距离运费;
<br> 2、不考虑距离因素,用重心公式估算初始选址点:
<br>
<br> ∑ViRiXi
<br>X0= …(4)
<br> ∑ViRi
<br> ∑ViRiYi
<br>Y0 …(5)
<br> ∑ViRi
<br> 3、根据公式(3),用步骤2得到的(X0,Y0)计算di;
<br> 4、将di代入公式(1),(2),得到修正的(X0,Y0)坐标;
<br> 5、根据修正的(X0,Y0)坐标,再重新计算di;
<br> 6、 重复步骤4和步骤5直至(X0,Y0)坐标在连续迭代过程中都不再变化或变化在误差范围内;
<br> 7、最后,如果需要,利用公式(0)计算最优选址的总成本。
<br>#include <stdio.h>
<br>#include <math.h>
<br>struct xuanzhi
<br>{
<br> double x,y,v,r;
<br>
<br>}xz[5]={{3,8,2000,0.050},{8,2,3000,0.050},{2,5,2500,0.075},{6,4,1000,0.075},{8,8,1500,0.075}};
<br>
<br>main()
<br>{
<br> struct xuanzhi;
<br> int i;
<br> double d[5];
<br> double x0=0.0,y0=0.0,min=0.0,TC=0.0,t=0.0,m=0.0,w=0.0,x1=0.0,y1=0.0,m1=0.0,m2=0.0,w2=0.0,t1=0.0,m3=0.0,w3=0.0;
<br>
<br> for(i=0;i<5;i++)
<br> {
<br> m+=xz[i].v*xz[i].r*xz[i].x;
<br> w+=xz[i].v*xz[i].r;
<br> m1+=xz[i].v*xz[i].r*xz[i].y;
<br> }
<br> x0=m/w;
<br> y0=m1/w;
<br> for(i=0;i<5;i++)
<br> {
<br> d[i]=sqrt((xz[i].x-x0)*(xz[i].x-x0)+(xz[i].y-y0)*(xz[i].y-y0));
<br> m3+=xz[i].v*xz[i].r*xz[i].x/d[i];
<br> t1+=xz[i].v*xz[i].r*xz[i].y/d[i];
<br> w3+=xz[i].v*xz[i].r/d[i];
<br> }
<br> x1=m3/w3;
<br> y1=t1/w3;
<br> do
<br> {
<br> x0=x1;
<br> y0=y1;
<br> for(i=0;i<5;i++)
<br> {
<br> d[i]=sqrt((xz[i].x-x0)*(xz[i].x-x0)+(xz[i].y-y0)*(xz[i].y-y0));
<br> m2+=xz[i].v*xz[i].r*xz[i].x/d[i];
<br> t+=xz[i].v*xz[i].r*xz[i].y/d[i];
<br> w2+=xz[i].v*xz[i].r/d[i];
<br> }
<br>
<br> x1=m2/w2;
<br> y1=t/w2;
<br> m2=0.0;
<br> t=0.0;
<br> w2=0.0;
<br> }while(fabs(x0-x1)-0.00000001>0&&fabs(y0-y1)-0.00000001>0);
<br> printf("x0=%12lf,y0=%12lf\n",x0,y0);
<br> for(i=0;i<5;i++)
<br> {
<br> d[i]=sqrt((xz[i].x-x0)*(xz[i].x-x0)+(xz[i].y-y0)*(xz[i].y-y0));
<br> min=xz[i].v*xz[i].r*d[i];
<br> TC+=min;
<br> }
<br> printf("min TC=%12lf\n",TC);
<br> getch();
<br>}</ca> </div><div align="right" class="gray" style="margin:5px;" id="best_answer_info"> 回答者:<a href="http://passport.baidu.com/?business&aid=6&un=%D7%D4%D3%C9%B5%C4%B2%CB%C4%F1#2" target=_blank>自由的菜鸟</a> -<a href="http://www.baidu.com/search/zhidao_help.html#n5" target=_blank> 大魔法师 九级</a><span id="im-user-eb68d7d4d3c9b5c4b2cbc4f14501" title="自由的菜鸟"> </span> <span id="best_answer_time">3-13 09:40</span></div><div style="text-align:right;margin:5px;"><a href="/remark/48278606.html" target="_blank">我来评论>></a></div><div class="t2">提问者对于答案的评价:</div><div class="p90 pl10 f14" id="best_answer_comment">自己检查出来了,其实里面只有一个低级错误</div><div class="t2">评价已经被关闭 <span class="f12 gray" style="font-weight:normal">目前有 0 个人评价</span></div><div class="pl10"><form method=post name=fpj action=/q><table border="0" cellpadding="0" cellspacing="0"><tr valign="top"><input type=hidden name=ct value=22><input type=hidden name=mpn><input type=hidden name=cm value=100003><input type=hidden name=qid value="48278606"><input type=hidden name=tn value=iksubmit><input type=hidden name=lu value="/question/48278606.html"><script>function g(w){ document.fpj.mpn.value=w;};document.fpj.lu.value=escape(location.href)</script><td width="120" class="f14">好<br><span class="red">50%</span> (0)</td><td class="f14" width="120">不好<br><span class="grn">50% </span>(0)</td></tr></table></form></div></div></div></div><div class="rr_4"></div><div class="rr_5"></div><div class="rr_1"></div></div><a name="irelatelink"></a> <div class="mb12 bai"><div class="rg_1"></div><div class="rg_2"></div><div class="rg_3"></div><div class="rg"> <div class="t1"><div class="ico"><div class="irelate"></div></div>相关内容</div> <div class="bc0" id="relate_question"> <table border="0" cellpadding="0" cellspacing="0" class="relateTable" id="qbRelateTable"> <tbody id="qbRelateTableBody"> <tr><td width=10 valign="top" class="gray">• </td>
<td class="f14"><a href="/question/50575091.html?fr=qrl" target="_blank"><cr>急 对于工业工程重心法选址的好处和局限性有哪些 希...</cr></a></td></tr><tr><td width=10 valign="top" class="gray">• </td>
<td class="f14"><a href="/question/39100545.html?fr=qrl" target="_blank"><cr>哪位高人能提供:有关中国历史上的都城选址条件以及...</cr></a></td></tr><tr><td width=10 valign="top" class="gray">• </td>
<td class="f14"><a href="/question/26164619.html?fr=qrl" target="_blank"><cr>化工厂如何选址 天津地区</cr></a></td></tr><tr><td width=10 valign="top" class="gray">• </td>
<td class="f14"><a href="/question/57397745.html?fr=qrl" target="_blank"><cr>宏康体内平衡理疗仪有什么核心技术?</cr></a></td></tr><tr><td width=10 valign="top" class="gray">• </td>
<td class="f14"><a href="/question/56498356.html?fr=qrl" target="_blank"><cr>都有哪些企业需要物流?</cr></a></td></tr> <tr id="moreRelateQuestion"><td width="10"> </td> <td class="queryMore"> <a href="/q?word=%D6%D8%D0%C4%B7%A8+%D1%A1%D6%B7%CE%CA%CC%E2&ct=17&pn=0&tn=ikaslist&rn=10&fr=qrl">更多关于<span>重心法 选址问题</span>的问题>></a></td> </tr> <tr><td class="relateTag" colspan="2">查看同主题问题:<span><a href="http://zhidao.baidu.com/topic?ct=29&tn=iktopic&word=%B1%E0%B3%CC+%B8%DF%CA%D6&fr=rtag" target="_blank">编程 高手</a></span> <span><a href="http://zhidao.baidu.com/topic?ct=29&tn=iktopic&word=c%2B%2B+%B1%E0%B3%CC&fr=rtag" target="_blank">c++ 编程</a></span> <span><a href="http://zhidao.baidu.com/topic?ct=29&tn=iktopic&word=%D6%D8%D0%C4&fr=rtag" target="_blank">重心</a></span> <span><a href="http://zhidao.baidu.com/topic?ct=29&tn=iktopic&word=%D1%A1%D6%B7&fr=rtag" target="_blank">选址</a></span> </td></tr> </tbody> </table> <script> var e=G("qbRelateTableBody"); if(e){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -