C++用分支限界法求解最短布線問題_第1頁
C++用分支限界法求解最短布線問題_第2頁
C++用分支限界法求解最短布線問題_第3頁
C++用分支限界法求解最短布線問題_第4頁
C++用分支限界法求解最短布線問題_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

實(shí)驗(yàn)六用分支限界法求解最短布線問題學(xué)院:計(jì)算機(jī)科學(xué)與技術(shù)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)號:班級:姓名:(JME序在MicrosoftVisua1C++6.0蚊建建下齡W)一、實(shí)驗(yàn)內(nèi)容:布線問題:印刷電路板將布線區(qū)域劃分成nXm個(gè)方格陣列,要求確定連接方格陣列中的方格a的中點(diǎn)到方格b的中點(diǎn)的最短布線方案。在布線時(shí),電路只能沿直線或直角布線,為了避免線路相交,己布了線的方格做了封鎖標(biāo)記,其他線路不允許穿過被封鎖的方格。實(shí)驗(yàn)要求:用分支限界法解此最短布線問題。分支限界法類似回溯法,也是一種在問題的解空間樹T上搜索問題解的算法。但分支限界法只找出滿足約束條件的一個(gè)最優(yōu)解,并且以廣度優(yōu)先或最小耗費(fèi)優(yōu)先的方式搜索解空間樹T。樹T是一棵子集樹或排列樹。在搜索時(shí),每個(gè)結(jié)點(diǎn)只有一次機(jī)會(huì)成為擴(kuò)展結(jié)點(diǎn),并且一次性產(chǎn)生其所有兒子結(jié)點(diǎn)。從活結(jié)點(diǎn)表中選擇下一擴(kuò)展結(jié)點(diǎn)有兩種方式:(1)隊(duì)列式(FIFO)(2)優(yōu)先隊(duì)列式。分支限界法可廣泛應(yīng)用于單源最短路徑問題,最大團(tuán)問題,布線問題,電路板排列問題等。舉例說明:一個(gè)7X7方格陣列布線如下:起始位置是a=(3,2),目標(biāo)位置是b=(4,6),陰影方格表示被封鎖的方格。那么一條從a到b的最短布線方案如下圖紅色路徑所示。a到b的最短距離是9。請思考:如何使得構(gòu)造出的最短布線中的折角數(shù)量最少?最短布線路徑示例二、算法思想:首先從點(diǎn)a出發(fā)向上下左右四個(gè)方向查找到點(diǎn)b的路徑,并且每走一步便做增一標(biāo)記,到達(dá)b點(diǎn)后,將路徑長度賦給一個(gè)變量,依次遞減路徑長度,由b點(diǎn)往回查找得到路徑。三、實(shí)驗(yàn)過程:#iiiclude<iostieam>#iiiclude<iomanip>usingnamespacestd;stmctPosition{introw;intcol;};stmctTEAMintx;mty;TEAM*next;};Positionstart,end.path[100];TEAM*team_l=NULL;inta[100][100];intm,n,path_len;voidOutputQ{mtij;cout?M\n布線區(qū)域圖\ir;fbi(i=0;i<m+2;i++)for(j=0j<n+2j++)(cout?setw(2)?a[i][j];}cout?endl;}cout?H\nH;retuin;}voidInput_data(){charyes;mtx,y;cout?"請輸入?yún)^(qū)域大小(行列的個(gè)數(shù)):二ciii?m?n;cout?"請輸入開始點(diǎn)坐標(biāo)(x,y):”;ciii?start.iow?start.col;cout?M請輸入結(jié)束點(diǎn)坐標(biāo)(x,y):”;ciii?end.row?end.col;cout?"區(qū)域內(nèi)是否有被占用點(diǎn)?(y/n)”;cm?yes;while(yes=,y,)jcout?M請輸入占用點(diǎn)的坐標(biāo)(x,y):”;cin?x?y;iRx<0||x>m+l||y<0||y>n+l||(x==start.row&&y=start.col)||(x==end.row&&y==end.col))coutvv”輸入錯(cuò)誤,請重新輸入!!!\iT;contmue;)else(a[x][y]=-l;}cout?M是否還有被占用點(diǎn)?(y/n)cin?yes;}fbr(x=0;x<m+2;x++)a[0][x]=-l;a[m+l][x]=-l;}fbr(x=0;x<n+2;x++)fa[x][0]=-l;a[x][n+l]=-l;}retuin;}voidInq(Positionp){TEAM*t,*q;q=teanO;t=newTEAM;t->x=p.row;t->y=p.col;t->next=NULL;if(teamJ==NULL)team_l=t;return;}while(q->next!=NULL)q=q->next;}q->next=t;retuin;Positionoutq()Positionout;out.row=team_l?>x;out.col=team_l->y;teaml=teaml->next;returnout;}voidFmd_path(){Positionoffset[4];Positionhere=(stait.row,stan.col);Positionnbi-(0.0);intnumofnbrs=4;intij;offset[0].row=0;offset[0].col=1;〃右offsetf1].row=1;offset[1].col=0;〃下offset[2].row=0;offset[2].col=-l;//左offset[3].row=-1;offset[3].col=0;//上if((start.row==end.row)&&(start.col=end.col))patlijen=0;return;}wlule(l)fbr(i=0;i<num_ofLubrs;i-H-)(nbr.row—here.row+offset[i].row;nbr.col=here.col+offset[i].col;if(a[nbLrow][nbr.col]==0)(a[nbr.row][nbr.col]=a[here.iow][here.col]+1;if((nbr.row=end.row)&&(nbr.col=end.col))break;Inq(nbr);//nbr入隊(duì)))if((nbr.row==end.row)&&(nbr.col==end.col))//是否到達(dá)目標(biāo)位置finishbreak;if(teamJ=NULL)//或節(jié)點(diǎn)隊(duì)列是否為空cout?M\n沒有結(jié)果!!!";return;)here=outqQ;}path_len=a[end.row][end.col];here=end;for(j=path_len-lj>=0;j--)〃往回找路徑JIpath。]=here;fbr(i=0;ivnum_oflnbrs;i-H-)(nbr.row=here.row+offset[i].row;nbr.col=heie.col+offset[i].col;if(a[nbLiow][nbr.col]=j)break;)here=nbr;}retuin;}voidOut_path0{inti;cout?H\n路徑為:”;coutvv”("vvstart.rowvv-yvstart.colvv“)”;fdr(i=O;i<path_len;i++)jcout?,,(H?patli[i].row?,\li?path[i].col?H),r;}cout?endl;retuin;}voidmain(){Iiiput_data();OutputQ;Find_path();Out_path();OutputQ;)四、實(shí)驗(yàn)結(jié)果:-?1:\算法分析與設(shè)計(jì)\06用分支限界法求解景短布線何袈\Debug\Cppl.exe7?93345455123123>260134y<>>>>>>>>>>>>>>>>>>>>>>>>>>::ynynynynynynynynynynynynyn/,,,,,,,,,,,w二點(diǎn)<x<y<x<y<x<y<xE<x<y<x<y<x<y<x<y<x<y<x<y<x<y<x<y<x<y"<x<x莊標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?標(biāo)?q虐占坐占占g坐占巫占璽占g坐占座占座占座占座占塑占座占g小坐坐用的用的用的用的用的用的用的用的用的用的用的用的K占g點(diǎn)有占苫占苫占苫占g占占苫占苫點(diǎn)占占苫占苫占苫占g占占苫占小墩葬否禺黑黑塞黑黑黑黑禺黑塞塞黑IX0^1一苫有占有占有占有占有占有占有占有占有占有占有占有占有AX-^^■入正入丕入正入不一^^入正入爪一入正入丕入迅入不一^^入^蕾富蕾富蕾富蕾蕾富蕾富蕾奇值請請區(qū)菖宙l^snlAF三-1-1-1-1-1-1-1-1-1-100-10000-1-100-1-1000-1-1RRRR-lRR-1-1000-1-100-1-10000-100-10000-10000-1-1-1-1-1-1-1-1-1-1布線區(qū)域圖路徑為"3,2〉〈4,2〉(5,2〉<5,3〉<5,4〉<6,4〉<6,5〉<6,6〉<5,6〉<4,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論