資源描述:
《分支限界法 求電路布線的最短路徑》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、#include#include#includeusingnamespacestd;//importthegriddata;ifstreamfin("map.txt");//這個(gè)map是7行7列,請(qǐng)以這個(gè)為例子來理解這個(gè)程序typedefstructPosition{introw;intcol;}Posi;//findtheshortestpathforthegridboolFindPath(Posistart,Posifinish,int&PathL
2、en,int**&grid,Posi*&path,intn,intm){//ifthestartpositionisthefinishpositionif((start.row==finish.row)&&(start.col==finish.col)){PathLen=0;returntrue;}Positionoffset[4];offset[0].row=-1;//upoffset[0].col=0;offset[1].row=1;//downoffset[1].col=0;offset[2].r
3、ow=0;//leftoffset[2].col=-1;offset[3].row=0;//rightoffset[3].col=1;Posihere,nbr;here.row=start.row;here.col=start.col;intNumOfNbrs=4;//ajacentposition;grid[start.row][start.col]=2;//initthestartposition'slengthwithvalue2,queueQ;do{for(intfirdex=0;f
4、irdex
5、l))//findtheshortestpath{break;}Q.push(nbr);}}if((nbr.row==finish.row)&&(nbr.col==finish.col)){break;//wiringwascompleted}if(Q.empty())//ifqueueisempty{returnfalse;//noresult}here=Q.front();Q.pop();}while(true);//tracebacktheshortestpathPathLen=grid[fini
6、sh.row][finish.col]-2;path=newPosi[PathLen];here=finish;for(intfirdex=PathLen-1;firdex>=0;firdex--){path[firdex]=here;for(intsecdex=0;secdex
7、col]==firdex+2)//Itisthenbr'sgridthatwhythegrid[nbr.row][nbr.col]cangiveindexof"firdex+2"{break;}}here=nbr;//movetothepreviousnode}returntrue;}//allocatememoryforthegridvoidInitGrid(int**&grid,intn,intm){grid=newint*[n+2];for(intfirdex=0;firdex
8、x++)grid[firdex]=newint[m+2];//settheboundfor(intindex=0;index