迷宮問題(BFS)+(DFS) - 有解無憂

文章推薦指數: 80 %
投票人數:10人

迷宮問題(BFS)+(DFS) ; using namespace std; ; int maxn = 100; ; bool inq[maxn][maxn] = { false }; ... 菜單 網站主頁 前端設計 後端開發 .NET開發 軟體設計 企業開發 區塊鏈 移動端開發 軟體工程 資料庫 作業系統 其他 主頁 > 其他 > 迷宮問題(BFS)+(DFS) 迷宮問題(BFS)+(DFS) 2021-04-2507:17:08其他 給定一個n*m大小的迷宮,其中*代表不可通過的墻壁,而“.”代表平地,S表示起點,T代表終點,移動程序中,如果當前位置是(x,y)(下標從0開始),且每次只能前往上下左右、(x,y+1)、(x,y-1)、(x-1,y)、(x+1,y)四個位置的平地,求從起點S到達終點T的最少步數,上面樣例S為(2,2),T的坐標為(4,3),在本題中,由于求的是最少步數,而BFS是通過層次的順序來遍歷的,因此可以從起點S開始計數遍歷的層數,那么在到達終點T時的層數就是需要求解的起點S到達終點T的最少步數, ..... .*.*. .*S*. .***. ...T* 若使用BFS:   #include #include #include usingnamespacestd; constintmaxn=100; intn,m; charmaze[maxn][maxn]; boolinq[maxn][maxn]={false}; structnode{ intx; inty; intstep; }S,T,Node; intX[4]={0,0,1,-1};//增量陣列便于遍歷四周節點 intY[4]={1,-1,0,0}; boolIsgo(intx,inty){ if(maze[x][y]=='*')returnfalse; elseif(x>=n||x<0||y>=m||y<0||inq[x][y]==true)returnfalse; elsereturntrue; } intBFS(){ queueq; q.push(S); while(!q.empty()){ nodetop=q.front();//最前面的元素出隊 q.pop(); if(top.x==T.x&&top.y==T.y){ returntop.step;//結束點 } for(inti=0;i<4;i++){ intnewX=top.x+X[i]; intnewY=top.y+Y[i]; if(Isgo(newX,newY)){ Node.step=top.step+1; Node.x=newX; Node.y=newY; q.push(Node);//符合條件的點全部入隊 inq[Node.x][Node.y]=true; } } } return-1;//沒有找到回傳一個-1; } intmain(){ scanf("%d%d",&n,&m); for(inti=0;i usingnamespacestd; constintmaxn=100; intm,n;//行數,列數 charmaze[maxn][maxn];//構建的迷宮 boolmark[maxn][maxn]={false};//用一個陣列標記是否進行訪問過 structnode{ intx,y; intstep; }S,Node,T; intX[4]={0,0,1,-1};//設定一個增量陣列方便遍歷四周 intY[4]={1,-1,0,0}; boolIsgo(intx,inty){ if(x<0||x>=m||y<0||y>=n||mark[x][y]==true)returnfalse; elseif(maze[x][y]=='*')returnfalse; elsereturntrue; } voidDFS(intx,inty,intstep){//step記錄當前走的步數 if(x==T.x&&y==T.y){ return;//到達遞回基,到達終點 } mark[x][y]=true;//訪問過便標記true for(inti=0;i<4;i++){ intnewX=x+X[i]; intnewY=y+Y[i]; if(Isgo(newX,newY)){//進行判斷是否是可行位置 Node.x=newX; Node.y=newY; Node.step=step+1;//步數加一 DFS(Node.x,Node.y,Node.step);//進行下一個可行的位置的遞回 } } } intmain() { scanf("%d%d",&m,&n);//輸入行數和列數, for(inti=0;i#defineadd_codeCTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS)/*更多游戲逆向視頻www.yxfzedu.com...... uj5u.com2020-09-1002:00:56more 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準北斗電力時鐘(北斗授時服務器)讓網路資料更精準京準電子科技官微——ahjzsz近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。

計算機網路資訊在電力系統中的應用,一方面使電力系統的運行...... uj5u.com2020-09-1002:01:03more 【CTF】CTFHub技能樹彩蛋writeup ?碎碎念CTFHub:https://www.ctfhub.com/筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。

感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。

而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。

個人還是非常喜歡這個...... uj5u.com2020-09-1002:04:05more 02windows基礎操作 我學到了一下幾點Windows系統目錄結構與滲透的作用常見Windows的服務詳解Windows埠詳解常用的Windows注冊表詳解hackerDOS命令詳解(netuser/type/md/rd/dir/cd/netusecopy、批處理等)利用dos命令制作...... uj5u.com2020-09-1002:04:18more 03.Linux基礎操作 我學到了以下幾點01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP01LINUXwindows:win038121619配置不繁瑣Linux:redhat,centos(紅帽社區版),Ubuntuserver,suseunix:金融機構,證券,銀...... uj5u.com2020-09-1002:04:30more 05HTML 01HTML介紹02頭部標簽講解03基礎標簽講解04表單標簽講解HTML前段語言js1.了解代碼2.根據代碼懂得挖掘漏洞(POST注入/XSS漏洞上傳)3.黑帽seo白帽seo客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單TDK標題,描述...... uj5u.com2020-09-1002:04:36more 最新发布 Scala將案例類串列轉換為另一個案例類串列 caseclassstudent1(name:String,marks:Long)caseclassstudent2(studentName:String,marks:Long)valmylist:List[student1]=List(student1("a",100),student... uj5u.com2021-10-1616:17:44more 具有不同泛型型別的Scala3擴展多載 我正在從Scala2.13遷移到Scala3,并且正在嘗試重寫小型實用程式函式。<br><br>在2.13中,可以撰寫一個更通用的隱式和另一個更具體的,但在Scala3中似乎不再可能。<br><br>typeOutcom... uj5u.com2021-10-1616:16:46more CatsScala中的序列和遍歷以映射型別 我有一個型別的值,List[EitherT[IO,String,Int]]我想對其進行序列處理以將其映射到EitherT[IO,String,List[Int]]我閱讀并找到了序列方法,但它給了我一個錯誤,說它需要[G]... uj5u.com2021-10-1616:14:44more 為什么集合上的`contains`不需要正確的型別? 這是怎么編譯的:scala>valx:Vector[Int]=Vector(1,2,3)valx:Vector[Int]=Vector(1,2,3)scala>x.contains("hello")valres4:Boolean=falsescala>x.contains(... uj5u.com2021-10-1616:14:15more 在Scala中將兩個不同的RDD與不同的鍵組合在一起 我有兩個文本檔案已經由sparkcontext創建為rdd。<br><br>其中一個(rdd1)保存相關詞:apple,applescar,carscomputer,computers另一個(rdd2)保存專案數:(apple,12)(apples,50)(car,5)(ca... uj5u.com2021-10-1616:13:46more 將錯誤從catch塊記錄到Cosmosdb-spark 目標:-使用“get”api呼叫從S3存盤桶中檢索物件,將檢索到的物件寫入azure資料湖,并在出現404s(未找到物件)等錯誤時將錯誤訊息寫入CosmosDB“my_dataframe”由一列(s3O... uj5u.com2021-10-1616:13:14more 如何處理用于理解和錯誤恢復的錯誤場景 目前我的錯誤處理沒有按照我的意愿作業,這就是我想要做的:UserApi.insert失敗,回傳錯誤,不要繼續WorkApi.insert失敗,呼叫UserApi.delete后回傳錯誤WorkApi.assign失敗,呼叫... uj5u.com2021-10-1616:12:45more 如何發送多條訊息作為我的來源 我只是在嘗試這個當前有一個TextMessage作為源的示例流://printeachincomingstricttextmessagevalprintSink:Sink[Message,Future[Done]]=Sink.forea... uj5u.com2021-10-1616:12:12more 如何在寫入時強制資料集匹配其架構? 經過一些轉換后,我想使用insertInto將spark資料集保存到鑲木地板表中。<br><br>ds.write.mode(SaveMode.Overwrite).insertInto(tablename)但是操作失敗,給我這個錯誤:[TABLENAME]... uj5u.com2021-10-1616:11:31more 用于理解的模式匹配分配如何轉化為一元操作? 我熟悉的概念,即Scala的for內涵是對一元的操作只是語法糖(map,withFilter,foreach和flatMap)和脫糖中描述這個流行的答案。<br><br>通過這種邏輯,我驚訝地發現,當使用模式匹配作為推導式的... uj5u.com2021-10-1616:10:58more 友情鏈接 有解無憂



請為這篇文章評分?