标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 11065 | Accepted: 5378 |
Description
Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
Source
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 int row , col , o ; 6 char map[150][150] ; 7 int a[150][150] ; 8 int x , y ; 9 10 void loop (char dir) 11 { 12 switch (dir) 13 { 14 case ‘N‘ : printf ("%d step(s) before a loop of %d step(s)\n" , a[x][y] - 1, a[x + 1][y] - a[x][y] + 1) ; break ; 15 case ‘E‘ : printf ("%d step(s) before a loop of %d step(s)\n" , a[x][y] - 1, a[x][y - 1] - a[x][y] + 1) ; break ; 16 case ‘S‘ : printf ("%d step(s) before a loop of %d step(s)\n" , a[x][y] - 1, a[x - 1][y] - a[x][y] + 1) ; break ; 17 case ‘W‘ : printf ("%d step(s) before a loop of %d step(s)\n" , a[x][y] - 1, a[x][y + 1] - a[x][y] + 1) ; break ; 18 } 19 } 20 void solve () 21 { 22 x = 1 , y = o ; 23 bool flag = 0; 24 char temp ; 25 a[x][y] = 1 ; 26 while (x >= 1 && x <= row && y >= 1 && y <= col) { 27 switch (map[x][y]) 28 { 29 case ‘N‘ : x-- ; if (a[x][y]) flag = 1 ; 30 if (!flag) 31 a[x][y] = a[x + 1][y] + 1 ; 32 else 33 temp = ‘N‘ ; break ; 34 case ‘E‘ : y++ ; if (a[x][y]) flag = 1 ; 35 if (!flag) 36 a[x][y] = a[x][y - 1] + 1 ; 37 else 38 temp = ‘E‘ ; break ; 39 case ‘S‘ : x++ ; if (a[x][y]) flag = 1 ; 40 if (!flag) 41 a[x][y] = a[x - 1][y] + 1 ; 42 else 43 temp = ‘S‘ ; break ; 44 case ‘W‘ : y-- ; if (a[x][y]) flag = 1 ; 45 if (!flag) 46 a[x][y] = a[x][y + 1] + 1 ; 47 else 48 temp = ‘W‘ ; break ; 49 } 50 if (flag) { 51 loop (temp) ; 52 break ; 53 } 54 } 55 if (!flag) 56 printf ("%d step(s) to exit\n" , a[x][y] - 1) ; 57 } 58 int main () 59 { 60 // freopen ("a.txt" , "r" , stdin) ; 61 while (~ scanf ("%d%d%d" , &row , &col , &o)) { 62 if (row == 0 && col == 0 && o == 0) 63 break ; 64 memset (a , 0 , sizeof(a)) ; 65 for (int i = 1 ; i <= row ; i++) 66 for (int j = 1 ; j <= col ; j++) 67 cin >> map[i][j] ; 68 69 solve () ; 70 /* for (int i = 1 ; i <= row ; i++) { 71 for (int j = 1 ; j <= col ; j++) { 72 printf ("%d " , a[i][j]) ; 73 } 74 puts ("") ; 75 } 76 printf ("\n\n") ;*/ 77 } 78 return 0 ; 79 }
标签:
原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4300023.html