math and computer science
阿新 • • 發佈:2019-01-26
1.問題描述:
X星球的一處迷宮遊樂場建在某個小山坡上。
它是由10x10相互連通的小房間組成的。
房間的地板上寫著一個很大的字母。
我們假設玩家是面朝上坡的方向站立,則:
L表示走到左邊的房間,
R表示走到右邊的房間,
U表示走到上坡方向的房間,
D表示走到下坡方向的房間。
X星球的居民有點懶,不願意費力思考。
他們更喜歡玩運氣類的遊戲。這個遊戲也是如此!
開始的時候,直升機把100名玩家放入一個個小房間內。
玩家一定要按照地上的字母移動。
迷宮地圖如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
請你計算一下,最後,有多少玩家會走出迷宮?
而不是在裡邊兜圈子。
請提交該整數,表示走出迷宮的玩家數目,不要填寫任何多餘的內容。
2.問題分析:
在裡面繞圈圈時是走不出去的。
3.程式解答:31
#include <stdio.h> #include <string.h> char grid[11][11]; int vis[11][11]; void init() { for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { scanf("%c", &grid[i][j]); } getchar(); //毒瘤 } } int check(int i, int j) { memset(vis, 0, sizeof(vis)); while(1)//從grid[i][j]出發,一直走下去 { if( i<0 || i>9 || j < 0 || j > 9)//success { return 1; } if(vis[i][j] == 1)//環,gg { return 0; } vis[i][j] = 1; switch(grid[i][j]) { case 'U': i--;break; case 'R': j++;break; case 'D': i++;break; case 'L': j--;break; default:break; } } } void solve() { int cnt = 0; for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { cnt += check(i, j); } } printf("%d\n", cnt); } int main() { init(); solve(); return 0; }