深度優(yōu)先搜索DFS的應用_第1頁
深度優(yōu)先搜索DFS的應用_第2頁
深度優(yōu)先搜索DFS的應用_第3頁
深度優(yōu)先搜索DFS的應用_第4頁
深度優(yōu)先搜索DFS的應用_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

深度優(yōu)先搜索DFSZOJProblemSet-1002FireNetTimeLimit:2SecondsMemoryLimit:65536KBSupposethatwehaveasquarecitywithstraightstreets.Amapofacityisasquareboardwithnrowsandncolumns,eachrepresentingastreetorapieceofwall.Ablockhouseisasmallcastlethathasfouropeningsthroughwhichtoshoot.ThefouropeningsarefacingNorth,East,South,andWest,respectively.Therewillbeonemachinegunshootingthrougheachopening.Hereweassumethatabulletissopowerfulthatitcanrunacrossanydistanceanddestroyablockhouseonitsway.Ontheotherhand,awallissostronglybuiltthatcanstopthebullets.Thegoalistoplaceasmanyblockhousesinacityaspossiblesothatnotwocandestroyeachother.Aconfigurationofblockhousesislegalprovidedthatnotwoblockhousesareonthesamehorizontalroworverticalcolumninamapunlessthereisatleastonewallseparatingthem.Inthisproblemwewillconsidersmallsquarecities(atmost4x4)thatcontainwallsthroughwhichbulletscannotrunthrough.Thefollowingimageshowsfivepicturesofthesameboard.Thefirstpictureistheemptyboard,thesecondandthirdpicturesshowlegalconfigurations,andthefourthandfifthpicturesshowillegalconfigurations.Forthisboard,themaximumnumberofblockhousesinalegalconfigurationis5;thesecondpictureshowsonewaytodoit,butthereareseveralotherways.Yourtaskistowriteaprogramthat,givenadescriptionofamap,calculatesthemaximumnumberofblockhousesthatcanbeplacedinthecityinalegalconfiguration.Theinputfilecontainsoneormoremapdescriptions,followedbyalinecontainingthenumber0thatsignalstheendofthefile.Eachmapdescriptionbeginswithalinecontainingapositiveintegernthatisthesizeofthecity;nwillbeatmost4.Thenextnlineseachdescribeonerowofthemap,witha'-'indicatinganopenspaceandanuppercase'X'indicatingawall.Therearenospacesintheinputfile.Foreachtestcase,outputonelinecontainingthemaximumnumberofblockhousesthatcanbeplacedinthecityinalegalconfiguration.Sampleinput:.X..????XX.. 2XX.X3.X.X.X.X.3....XX.XX40Sampleoutput:51524Source:ZhejiangUniversityLocalContest2001Code:#include<cstdio>#include<iostream>usingnamespacestd;#defineMaxlen4charcMap[Maxlen][Maxlen];intiBest,n;boolCanPut(introw,intcol){inti;for(i=row-1;i>=0;i--)〃掃描同一列,因不用掃本身,所以row-1{if(cMap[i][col]=='O')returnfalse;if(cMap[i][col]=='X')break;}for(i=col-1;i>=0;i--) 〃掃描行{if(cMap[row][i]=='O')returnfalse;if(cMap[row][i]=='X')break;}returntrue;}voidsolve(intk,intcurrent)//curretn為放的數目,k為所寫的代號0,1,2,3.。。。n*n{intx,y;if(k==n*n) 〃到達最后一個if(current>iBest){iBest=current;}}else{x=k/n;〃得到x坐標y=k%n;〃得到y(tǒng)坐標if(cMap[x][y]=='.'&&CanPut(x,y)){cMap[x][y]='O'; 〃放炮solve(k+1,current+1); 〃進入下一個坐標,數目加一cMap[x][y]='.'; 〃還原}solve(k+1,current); 〃很技術,你可以選擇也可以不先擇}}intmain(){freopen("input.txt”,"r”,stdin);freopen("output.txt”,"w”,stdout);inti,j;while(scanf("%d”,&n)&&n){for(i=0;i<n;i++){for(j=0;j<n;j++){cin>>cMap[i][j];}}iBest=0; //不要忘了初始化solve(0,0);printf("%d\n”,iBest);}}ZOJProblemSet-1008GnomeTetravexTimeLimit:10SecondsMemoryLimit:32768KBHartisengagedinplayinganinterestinggame,GnomeTetravex,thesedays.Inthegame,atthebeginning,theplayerisgivenn*nsquares.Eachsquareisdividedintofourtrianglesmarkedfournumbers(rangefrom0to9).Inasquare,thetrianglesarethelefttriangle,thetoptriangle,therighttriangleandthebottomtriangle.Forexample,Fig.1showstheinitialstateof2*2squares.Fig.1Theinitialstatewith2*2squaresTheplayerisrequiredtomovethesquarestotheterminationstate.Intheterminationstate,anytwoadjoiningsquaresshouIdmaketheadjacenttrianglemarkedwiththesamenumber.Fig.2showsoneoftheterminationstatesoftheaboveexample.Fig.2OneterminationstateoftheaboveexampleItseemsthegameisnotsohard.Butindeed,Hartisnotaccomplishedinthegame.Hecanfinishtheeasiestgamesuccessfully.Whenfacingwithamorecomplexgame,hecanfindnowayout.Oneday,whenHartwasplayingaverycomplexgame,hecriedout,"Thecomputerismakingagooseofme.It'simpossibletosolveit."Tosuchapoorplayer,thebestwaytohelphimistotellhimwhetherthegamecouldbesolved.Ifheistoldthegameisunsolvable,heneedn'twastesomuchtimeonit.InputTheinputfileconsistsofseveralgamecases.Thefirstlineofeachgamecasecontainsoneintegern,0<=n<=5,indicatingthesizeofthegame.Thefollowingn*nlinesdescribethemarkingnumberofthesetriangles.Eachlineconsistsoffourintegers,whichinorderrepresentthetoptriangle,therighttriangle,thebottomtriangleandthelefttriangleofonesquare.Afterthelastgamecase,theinteger0indicatestheterminationoftheinputdataset.OutputYoushouldmakethedecisionwhetherthegamecasecouldbesolved.Foreachgamecase,printthegamenumber,acolon,andawhitespace,thendisplayyourjudgment.Ifthegameissolvable,printthestring"Possible".Otherwise,pleaseprint"Impossible"toindicatethatthere'snowaytosolvetheproblem.Printablanklinebetweeneachgamecase.Note:Anyunwantedblanklinesorwhitespacesareunacceptable.SampleInput2TOC\o"1-5"\h\z9144456854044321112223334440OutputfortheSampleInputGame1:PossibleGame2:ImpossibleCode:#include<stdio.h>intn; 〃方格矩陣的大小intq; 〃方格的類型數intiSquare[25][4];//方格矩陣,類型相同的只存一個intiCount[25]; //存放方格的類型,因為方格數最多25個intiTable[25]; 〃存放解決方案,實際放置的方格〃判斷函數,是否能把方格放下intPlace(intiPos){inti;if(iPos==n*n)return1; //n*n個方格都可以放下,返回值為真〃對q種類型,每個都往ipos的位置放一下試試for(i=0;i<q;i++){if(iCount[i]==0)continue;〃該種類型方格已經用完if(iPos%n!=0)//不是最左邊的if(iSquare[iTable[iPos-1]][1]!=iSquare[i][3])continue;if(iPos>=n)//不是最上邊的if(iSquare[iTable[iPos-n]][2]!=iSquare[i][0])continue;iTable[iPos]=i;iCount[i]--;if(Place(iPos+1)==1)return1;//dfs的精髓!?。。。?!〃恢復該方格的類型數1個,便于下一次搜索iCount[i]++;}

溫馨提示

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

評論

0/150

提交評論