2017第八屆藍橋杯省賽Java A組--迷宮
阿新 • • 發佈:2018-12-27
標題:迷宮
X星球的一處迷宮遊樂場建在某個小山坡上。
它是由10x10相互連通的小房間組成的。
房間的地板上寫著一個很大的字母。
我們假設玩家是面朝上坡的方向站立,則:
L表示走到左邊的房間,
R表示走到右邊的房間,
U表示走到上坡方向的房間,
D表示走到下坡方向的房間。
X星球的居民有點懶,不願意費力思考。
他們更喜歡玩運氣類的遊戲。這個遊戲也是如此!
開始的時候,直升機把100名玩家放入一個個小房間內。
玩家一定要按照地上的字母移動。
迷宮地圖如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
請你計算一下,最後,有多少玩家會走出迷宮?
而不是在裡邊兜圈子。
請提交該整數,表示走出迷宮的玩家數目,不要填寫任何多餘的內容。
X星球的一處迷宮遊樂場建在某個小山坡上。
它是由10x10相互連通的小房間組成的。
房間的地板上寫著一個很大的字母。
我們假設玩家是面朝上坡的方向站立,則:
L表示走到左邊的房間,
R表示走到右邊的房間,
U表示走到上坡方向的房間,
D表示走到下坡方向的房間。
X星球的居民有點懶,不願意費力思考。
他們更喜歡玩運氣類的遊戲。這個遊戲也是如此!
開始的時候,直升機把100名玩家放入一個個小房間內。
玩家一定要按照地上的字母移動。
迷宮地圖如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
而不是在裡邊兜圈子。
請提交該整數,表示走出迷宮的玩家數目,不要填寫任何多餘的內容。
如果你還沒明白遊戲規則,可以參看一個簡化的4x4迷宮的解說圖:
此題為第一題,填空題只需要算出結果即可,難度較低。
遍歷每一個人的座標,讓其一直吵著箭頭方向行走,走過的房間標記為cover[x][y]=1,
直到走出去或是繞圈圈(再次遇到cover[x][y]=1的房間)。
程式碼如下:
public class Main{ static int ok = 0,res = 0; static char road[][] = new char[][]{{'U','D','D','L','U','U','L','R','U','L'}, {'U','U','R','L','L','L','R','R','R','U'}, {'R','R','U','U','R','L','D','L','R','D'}, {'R','U','D','D','D','D','U','U','U','U'}, {'U','R','U','D','L','L','R','R','U','U'}, {'D','U','R','L','R','L','D','L','R','L'}, {'U','L','L','U','R','L','L','R','D','U'}, {'R','D','L','U','L','L','R','D','D','D'}, {'U','U','D','D','U','D','U','D','L','L'}, {'U','L','R','D','L','U','U','R','R','R'}}; static int cover[][] = new int[10][10]; public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0;i<10;i++){ for(int k=0;k<10;k++){ ok = 0; cover = new int[10][10]; dfs(i,k); if(ok==1){ res++; //System.out.println(i+","+k); 輸出能走出迷宮的人的座標,方便檢查結果 } } } System.out.println(res); } static void dfs(int x,int y){ if(x==-1||x==10||y==-1||y==10){ ok = 1; return; } if(cover[x][y]==1) return; cover[x][y] = 1; if(road[x][y]=='U'){ dfs(x-1,y); } else if(road[x][y]=='D'){ dfs(x+1,y); } else if(road[x][y]=='L'){ dfs(x,y-1); } else if(road[x][y]=='R'){ dfs(x,y+1); } } }