走迷宮 深搜做法

2021-08-18 16:56:10 字數 1370 閱讀 9628

time limit: 1 sec  

memory limit: 128 mb

submit: 85  

solved: 77 [

submit][

status][

web board]

x身在乙個m*n大小的迷宮中,迷宮中的障礙物是不能通行的。迷宮中用s代表x,用e代表出口,#代表障礙物,*代表可以通行的道路。x只可以向上、下、左、右四個方向行走,並且每一步只能走乙個單位的長度。現給定m,n以及迷宮的樣子,求解x走到出口的過程中最少需要改變行走方向幾次?如果x無法到達出口就輸出 -1,否則輸出需要的最小改變方向次數,x會盡量走改變方向較少的路線,只要相鄰兩次行走方向不一樣就算改變方向一次。 (1<=m,n<=100)

有多組輸入資料,每組第一行輸入兩個正整數m和n,

接下來輸入m*n的迷宮,迷宮元素只包含s、e、*、#四種字元。

輸入以檔案為結束(eof)。

對於每組資料,如果x能從s能到達出口e,輸出最少改變方向次數,否則輸出-1,每組輸出佔一行。

5 5

s****

####*

*****

*####

****e

4

因為障礙物(#)不能通行,所以s只能通過*到達e,最少需要轉彎4次

//比較簡單的水題,深搜廣搜都能解,先發深搜解法,重點就是z,sum,z是我方向陣列的下標,如果z和i不一樣說明方向變了,轉了一次彎,就+1,否則就不變,用遞迴回溯模擬走的方向

# include # include using namespace std;

char str[105][105];

int sx, sy, px, py;

int n, m;

int f[105][105];

int flag = 0;

int dis[2] = ;

void dfs(int x, int y,int z,int sum)

if(f[tx][ty] == 0)

else

else

dfs(tx,ty,i,sum);

}f[tx][ty] = 0;

//dfs(tx, ty);}}

return ;

}int main(int argc, char *argv)

for(int i = 0; i < n; i++)

if(str[i][j] == 'e')}}

dfs(sx, sy,-1,0);

/* if(flag)

else*/}

return 0;

}

走迷宮 深搜加標記

題目 x星球的一處迷宮遊樂場建在某個小山坡上。它是由10x10相互連通的小房間組成的。房間的地板上寫著乙個很大的字母。我們假設玩家是面朝上坡的方向站立,則 l表示走到左邊的房間,r表示走到右邊的房間,u表示走到上坡方向的房間,d表示走到下坡方向的房間。x星球的居民有點懶,不願意費力思考。他們更喜歡玩...

迷宮問題 深搜

簡單的實現了迷宮 深搜 並非是最短路徑 我們規定 1 為牆,0 為通路。為了避免越界,在迷宮外面加了一堵牆。當然也可以不需要牆。實現很簡單,用乙個陣列棧儲存已訪問過的位置,用四個if語句判斷東南西北四個方向能否走通。若往前已無路可走便退回上乙個位置。具體實現如下 include include de...

迷宮問題(深搜

d 迷宮問題 crawling in process.crawling failed time limit 1000msmemory limit 65536kb64bit io format i64d i64u submit status description 定義乙個二維陣列 int maze ...