【宽搜】BAPC2014 J Jury Jeopardy (Codeforces GYM 100526)

题目链接:

  http://codeforces.com/gym/100526

  http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11673&courseid=0

题目大意:

  一个机器人一开始位于迷宫入口,面朝东,接下来按照右前左后的顺序遍历迷宫,如果有墙'#'就执行下一个方向

  直到找到一个是路'.'的方向并且往那个方向移动一格,并改为面朝该方向。

  现在给你机器人右前左后的字符数组,求原来的地图,数据保证没有不能遍历的点。最顶端,右端和下端都应该有一层墙壁'#'。

  数据保证最后机器人回到起点。地图大小不超过100x100

题目思路:

  【宽搜】

  选定起点(我选的是200,200)然后开始按照字符串中的方向字符走,并且把这个点覆盖成路'.'。接着改变朝向。

  做的过程中记录到达的边界大小,最后按边界输出地图即可。

  1 //
  2 //by coolxxx
  3 //#include<bits/stdc++.h>
  4 #include<iostream>
  5 #include<algorithm>
  6 #include<string>
  7 #include<iomanip>
  8 #include<map>
  9 #include<memory.h>
 10 #include<time.h>
 11 #include<stdio.h>
 12 #include<stdlib.h>
 13 #include<string.h>
 14 //#include<stdbool.h>
 15 #include<math.h>
 16 #define min(a,b) ((a)<(b)?(a):(b))
 17 #define max(a,b) ((a)>(b)?(a):(b))
 18 #define abs(a) ((a)>0?(a):(-(a)))
 19 #define lowbit(a) (a&(-a))
 20 #define sqr(a) ((a)*(a))
 21 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
 22 #define mem(a,b) memset(a,b,sizeof(a))
 23 #define eps (1e-8)
 24 #define J 10
 25 #define mod 1000000007
 26 #define MAX 0x7f7f7f7f
 27 #define PI 3.14159265358979323
 28 #define N 504
 29 #define M 10000004
 30 using namespace std;
 31 typedef long long LL;
 32 int cas,cass;
 33 int n,m,lll,ans;
 34 int l,r,u,d;
 35 char s[M];
 36 int dx[]={0,-1,0,1};
 37 int dy[]={1,0,-1,0};
 38 int R[]={3,0,1,2},F[]={0,1,2,3},L[]={1,2,3,0},B[]={2,3,0,1};
 39 char mapp[N][N];
 40 void print()
 41 {
 42     int i,j;
 43     printf("%d %d
",d-u+3,r-l+2);
 44     for(i=u-1;i<=d+1;i++)
 45     {
 46         for(j=l;j<=r+1;j++)
 47             printf("%c",mapp[i][j]);
 48         puts("");
 49     }
 50 }
 51 int main()
 52 {
 53     #ifndef ONLINE_JUDGE
 54 //    freopen("1.txt","r",stdin);
 55 //    freopen("2.txt","w",stdout);
 56     #endif
 57     int i,j,k;
 58     int x,y,way;
 59 //    for(scanf("%d",&cas);cas;cas--)
 60 //    for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
 61 //    while(~scanf("%s",s+1))
 62 //    while(~scanf("%d",&n))
 63     scanf("%d",&cas);
 64     printf("%d
",cas);
 65     while(cas--)
 66     {
 67         scanf("%s",s);
 68         for(i=0;i<N;i++)
 69             for(j=0;j<N;j++)
 70                 mapp[i][j]='#';
 71         n=strlen(s);
 72         r=l=u=d=200,x=200,y=200;way=0;
 73         mapp[x][y]='.';
 74         for(i=0;i<n;i++)
 75         {
 76             if(s[i]=='R')
 77             {
 78                 way=R[way];
 79                 x+=dx[way];
 80                 y+=dy[way];
 81                 mapp[x][y]='.';
 82             }
 83             else if(s[i]=='F')
 84             {
 85                 way=F[way];
 86                 x+=dx[way];
 87                 y+=dy[way];
 88                 mapp[x][y]='.';
 89             }
 90             else if(s[i]=='L')
 91             {
 92                 way=L[way];
 93                 x+=dx[way];
 94                 y+=dy[way];
 95                 mapp[x][y]='.';
 96             }
 97             else if(s[i]=='B')
 98             {
 99                 way=B[way];
100                 x+=dx[way];
101                 y+=dy[way];
102                 mapp[x][y]='.';
103             }
104             u=min(u,x);d=max(d,x);l=min(l,y);r=max(r,y);
105         }
106         print();
107     }
108     return 0;
109 }
110 /*
111 //
112 
113 //
114 */
View Code
原文地址:https://www.cnblogs.com/Coolxxx/p/5805165.html