锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
榪欐榪樻湁鍙ヨ璇寸殑灝辨槸錛氾紙鍦ㄦ妸錛及錛ワ籍琛ㄤ腑鏈浼樺肩殑鑺傜偣鎻掑叆銆錛o棘錛汲錛ヨ〃涓椂濡傛灉鍦跡錛集錛籌譏琛ㄤ腑宸茬粡瀛樺湪閭e氨瑕佹瘮杈冿紝濡傛灉瀛樺湪鐨勮妭鐐圭殑鏉冨兼瘮瑕佹彃鍏ョ殑澶э紝灝辮鎶婂瓨鍦ㄧ殑鏇挎崲鎺夛紙鑺傜偣涓墍鏈夊唴瀹?/span>錛夛紝鍚﹀垯灝卞拷鐣?/span>錛夛紟
絎紦姝ワ細灝辨槸閲嶅絎紥姝ラ錛堢ず渚嬪浘濡備笅錛?br>
鎴戞兂鍥犺鏄庣櫧浜嗗惂錛?br>
濂戒簡鏈鍚庝竴寮犲畬宸ワ紒
緇堢偣錛?2鑺傜偣錛夋壘鍒頒簡鏄惂錛佹垜鎯沖洜璇ユ槑鐧戒簡鍚э紒
鍥劇敾鐨勪笉澶ソ, :)
緇胯壊鐨勬槸鑺傜偣,綰㈣壊鐨勪負鏉冨?綆ご涓哄彲閫氳鐨勬爣蹇?
鐜板湪鎴戜滑瑕佷粠 0 鑺傜偣 鍒?12 鑺傜偣 鎵句竴鏉℃渶浼樿礬寰?
棣栧厛鍜變滑瑕佽В鍐砃ODE鐐瑰瓨璐殑淇℃伅(緇撴瀯):
struct NodeBaseInfo
{
unsigned short nNodeID;銆銆銆//鐣彿
unsigned long nMeasure; //鏉冨?br> NodeBaseInfo *pParent; //鐖惰妭鐐?br>};
鎴戝啓浜嗙畝鍗曠殑緇撴瀯澶у鍙互鏍規嵁鑷繁闇瑕佸畾涔夛紙瀹氫箟榪欎釜緇撴瀯鏄負浜嗘洿濂界悊瑙o級
涓嬮潰璁茬殑鏄渶涓昏鐨勪簡錛?br>DIJKSTAR綆楁硶涓瀹氫箟涓や釜琛細OPEN 鍜?CLOSE 錛堝叾瀹炲彲浠ョ湅浣滈摼琛級
浠栫殑鍘熺悊灝辨槸鎶婃病鏈夐亶鍘嗙殑鐐規斁鍦?OPEN 琛ㄤ腑錛屾妸浠?OPEN琛ㄤ腑閬嶅巻鍒扮殑鏈鐭潈鍊肩殑鐐規斁鍏?br>CLOSE 琛ㄤ腑錛屽綋鎻掑叆 CLOSE琛ㄤ腑鐨勮妭鐐圭殑鐣彿浜庢垜浠鐨勯噸鐐規椂綆楁硶緇撴潫錛涚劧鍚庢寜鐓х埗鑺傜偣錛坧Parent錛?br>鍚戜笂閫掑綊灝卞彲浠ュ緱鍒版垜浠鐨勬渶浼樿礬寰勪簡銆?br>
絎竴姝ワ細搴斾負 OPEN 鍜孋LOSE琛ㄩ兘鏄┖鐨勶紝鎶婅搗鐐癸紙0鑺傜偣錛夋彃鍏LOSE鏍囦腑錛屽畠鐨勬潈鍊間負0銆傛妸璧風偣錛?鑺傜偣錛夐檮榪戠殑鑺傜偣錛堝洜璇ヤ負鍙氳鐨勶級鎻掑叆OPEN 琛ㄤ腑錛?u style="COLOR: red">鏈濂芥寜鏉冨間粠澶ч亾灝忕殑欏哄簭鎻掑叆錛岃繖鏍峰彇寰楁渶浼樺兼椂錛岃繖鏍烽熷害灝變細寰堝揩錛夈傦紙濡傜ず渚嬪浘錛?br>
絎?姝ワ細浠嶰PEN琛ㄤ腑鎵懼埌鏉冨兼渶灝忕殑鑺傜偣錛屾妸瀹冩彃鍏LOSE 琛ㄤ腑, 鎶婅繖涓妭鐐圭殑鍙繛閫氱殑鑺傜偣鏌ュ叆錛及錛ワ籍
琛紝錛?span style="COLOR: red">濡傛灉錛及錛ワ籍琛ㄤ腑瀛樺湪瑕佹煡鍏ョ殑鐐癸紝濡傛灉瑕佹彃鍏ョ殑鑺傜偣鐨勬潈鍊兼瘮宸茬粡瀛樺湪鐨勫皬錛屽氨鎶婂凡緇忔煡鍏ョ殑鏉冨艱涓烘渶灝忕殑錛屽鏋滆鎻掑叆鐨勮妭鐐圭殑鏉冨兼瘮宸茬粡瀛樺湪鐨勫ぇ錛屽氨蹇借惤瀹?/u>錛庯級
錛堜負浜嗘洿濂界殑鐞嗚В鎴戞妸鐖惰妭鐐逛篃鍔犲叆浜嗭紝濡傜ず渚嬪浘錛?br>
鎴戜滑鍏堟潵鐪嬬湅10榪涘埗涓嬫槸濡備綍鎵嬪伐璁$畻寮鏂圭殑銆?br>鍏堢湅涓嬮潰涓や釜綆楀紡錛?br>x = 10*p + q (1)
鍏紡(1)宸﹀彸騫蟲柟涔嬪悗寰楋細
x^2 = 100*p^2 + 20pq + q^2 (2)
鐜板湪鍋囪鎴戜滑鐭ラ亾x^2鍜宲錛屽笇鏈涙眰鍑簈鏉ワ紝姹傚嚭浜唓涔熷氨姹傚嚭浜唜^2鐨勫紑鏂箈浜嗐?br>鎴戜滑鎶婂叕寮?2)鏀瑰啓涓哄涓嬫牸寮忥細
q = (x^2 - 100*p^2)/(20*p+q) (3)
榪欎釜綆楀紡宸﹀彸閮芥湁q錛屽洜姝ゆ棤娉曠洿鎺ヨ綆楀嚭q鏉ワ紝鍥犳鎵嬪伐鐨勫紑鏂圭畻娉曞拰鎵嬪伐闄ゆ硶綆楁硶涓鏍鋒湁涓姝ラ渶瑕佺寽鍊箋?/p>
鎴戜滑鏉ヤ竴涓墜宸ヨ綆楃殑渚嬪瓙錛氳綆?234567890鐨勫紑鏂?/p>
棣栧厛鎴戜滑鎶婅繖涓暟涓や綅涓や綅涓緇勫垎寮錛岃綆楀嚭鏈楂樹綅涓?銆備篃灝辨槸(3)涓殑p錛屾渶涓嬮潰涓琛岀殑334涓轟綑鏁幫紝涔熷氨鏄叕寮?3)涓殑(x^2 - 100*p^2)榪戜技鍊?br> 3
---------------
/ 12 34 56 78 90
9
---------------
/ 3 34
涓嬮潰鎴戜滑瑕佹壘鍒頒竴涓?-9鐨勬暟q浣垮畠鏈鎺ヨ繎婊¤凍鍏紡(3)銆傛垜浠厛鎶妏涔樹互20鍐欏湪334宸﹁竟錛?br> 3 q
---------------
/ 12 34 56 78 90
9
---------------
(20*3+q)*q / 3 34
鎴戜滑鐪嬪埌q涓?鏃?60+q)*q鐨勫兼渶鎺ヨ繎334錛岃屼笖涓嶈秴榪?34銆備簬鏄垜浠緱鍒幫細
3 5
---------------
/ 12 34 56 78 90
9
---------------
65 / 3 34
3 25
---------------
9 56
鎺ヤ笅鏉ュ氨鏄噸澶嶄笂闈㈢殑姝ラ浜嗭紝榪欓噷灝變笉鍐嶅暟鍡︿簡銆?
榪欎釜鎵嬪伐綆楁硶鍏跺疄鍜?0榪涘埗鍏崇郴涓嶅ぇ錛屽洜姝ゆ垜浠彲浠ュ緢瀹規槗鐨勬妸瀹冩敼涓轟簩榪涘埗錛屾敼涓轟簩榪涘埗涔嬪悗錛屽叕寮?3)灝卞彉鎴愪簡錛?br>q = (x^2 - 4*p^2)/(4*p+q) (4)
鎴戜滑鏉ョ湅涓涓緥瀛愶紝璁$畻100(浜岃繘鍒?100100)鐨勫紑鏂癸細
1 0 1 0
-----------
/ 1 10 01 00
1
-----------
100 / 0 10
0 00
-----------
1001 / 10 01
10 01
-----------
0 00
榪欓噷姣忎竴姝ヤ笉鍐嶆槸鎶妏涔樹互20浜嗭紝鑰屾槸鎶妏涔樹互4錛屼篃灝辨槸鎶妏鍙崇Щ涓や綅錛岃岀敱浜巕鐨勫煎彧鑳戒負0鎴栬?錛屾墍浠ユ垜浠彧闇瑕佸垽鏂綑鏁?x^2 - 4*p^2)鍜?4*p+1)鐨勫ぇ灝忓叧緋伙紝濡傛灉浣欐暟澶т簬絳変簬(4*p+q)閭d箞璇ヤ笂涓涓?錛屽惁鍒欒涓婁竴涓?銆?/p>
涓嬮潰緇欏嚭瀹屾垚鐨凜璇█紼嬪簭錛屽叾涓璻oot琛ㄧずp錛宺em琛ㄧず姣忔璁$畻涔嬪悗鐨勪綑鏁幫紝divisor琛ㄧず(4*p+1)錛岄氳繃a>>30鍙朼鐨勬渶楂?2浣嶏紝閫氳繃a<<=2灝嗚綆楀悗鐨勬渶楂?浣嶅墧闄ゃ傚叾涓璻oot鐨勪袱嬈?lt;<1鐩稿綋浜?*p銆傜▼搴忓畬鍏ㄦ槸鎸夌収鎵嬪伐璁$畻鏀瑰啓鐨勶紝搴旇涓嶉毦鐞嗚В銆?br>unsigned short sqrt(unsigned long a){
unsigned long rem = 0;
unsigned long root = 0;
unsigned long divisor = 0;
for(int i=0; i<16; ++i){
root <<= 1;
rem = ((rem << 2) + (a >> 30));
a <<= 2;
divisor = (root<<1) + 1;
if(divisor <= rem){
rem -= divisor;
root++;
}
}
return (unsigned short)(root);
}