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 5s****
####*
*****
*####
****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 ...