标签:
American Carnival Makers Inc. (ACM) has a long history of designing rides and attractions. One of their more popular attractions is a fun house that includes a room of mirrors. Their trademark is to set up the room so that when looking forward from the entry door, the exit door appears to be directly ahead. However, the room has double-sided mirrors placed throughout at 45 degree angles. So, the exit door can be on any of the walls of the room. The set designer always places the entry and mirrors, but can never seem to be bothered to place the exit door. One of your jobs as part of the construction crew is to determine the placement of the exit door for the room given an original design.
The final diagram for a sample room is given below. The
11 6 xxxxxxxxxxx x../..\...x x..../....x *../......x x.........x xxxxxxxxxxx 5 5 xxxxx *...x x...x x...x xxxxx 5 5 xxxxx x./\x *./.x x..\x xxxxx 6 6 xxx*xx x/...x x....x x/./.x x\./.x xxxxxx 10 10 xxxxxxxxxx x.../\...x x........x x........x x.../\..\x *...\/../x x........x x........x x...\/...x xxxxxxxxxx 0 0
HOUSE 1 xxxxxxxxxxx x../..\...x x..../....x *../......x x.........x xxxxxx&xxxx HOUSE 2 xxxxx *...& x...x x...x xxxxx HOUSE 3 xxxxx x./\x *./.x x..\& xxxxx HOUSE 4 xxx*xx x/...x x....x x/./.& x\./.x xxxxxx HOUSE 5 xxxxxxxxxx x.../\...x x........x x........x &.../\..\x *...\/../x x........x x........x x...\/...x xxxxxxxxxx
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<stack> #include<vector> #include<math.h> #include<map> #define inf 0x3f3f3f3f #define LL long long using namespace std; struct node { int x; int y; }; char mm[31][31]; int n,m; void BFS(int ii,int jj,int jx,int jy) { queue<node>q; while(!q.empty()) { q.pop(); } struct node t,f; t.x = ii; t.y = jj; q.push(t); while(!q.empty()) { t = q.front(); q.pop(); f.x = t.x + jx; f.y = t.y + jy; if(mm[f.x][f.y] == 'x') { mm[f.x][f.y] = '&'; break; } else if(mm[f.x][f.y] == '/') { if(jx == 0 && jy == 1) { jx = -1; jy = 0; } else if(jx == 0 && jy == -1) { jx = 1; jy = 0; } else if(jx == 1 && jy == 0) { jx = 0; jy = -1; } else if(jx == -1 && jy == 0) { jx = 0; jy = 1; } } else if(mm[f.x][f.y] == '\\') { if(jx == 0 && jy == 1) { jx = 1; jy = 0; } else if(jx == 0 && jy == -1) { jx = -1; jy = 0; } else if(jx == 1 && jy == 0) { jx = 0; jy = 1; } else if(jx == -1 && jy == 0) { jx = 0; jy = -1; } } q.push(f); } } int main() { int kk = 0; while(scanf("%d%d",&m,&n)!=EOF) { if(n == 0 && m == 0) { break; } int xx,yy; for(int i=0; i<n; i++) { scanf("%s",mm[i]); for(int j=0; j<m; j++) { if(mm[i][j] == '*') { xx = i; yy = j; break; } } } if(xx == 0) { BFS(xx,yy,1,0); } else if(xx == n-1) { BFS(xx,yy,-1,0); } else if(yy == 0) { BFS(xx,yy,0,1); } else if(yy == m-1) { BFS(xx,yy,0,-1); } printf("HOUSE %d\n",++kk); for(int i=0; i<n; i++) { printf("%s\n",mm[i]); } } return 0; }
标签:
原文地址:http://blog.csdn.net/yeguxin/article/details/45021759