784-Maze Authentication

Source: Internet
Author: User

Maze authentication ation
A maze of rectangular rooms is represented on a two dimen1_grid as specified strated in figure 1a. each point of the grid is represented by a character. the points of room wallare marked by the same character which can be any printable character different than '*', '_' and space. in figure 1 this character is 'x '. all the other points of the grid are marked by spaces.


Xxxxxxxxxxxxxxxxxxxxxxx XXXXXXXXXXXXXXXXXXXXX
X # X
X ########### X
X # X
Xxxxxx xxx xxxxxxxxxx xxxxxx # XXX # XXXXXXXXXX
X # X ### X ## X ### X
X ################ X
X # X ### X ## X ### X
Xxxxxxxxxxxxxxxxxxxxxxx XXXXXXXXXXXXXXXXXXXXX
A) Initial maze B) Painted maze
Figure 1. Mazes of rectangular rooms

All rooms of the maze are equal sized with all Wils 3 points wide and 1 point thick as bounded strated in figure 2. in addition, a wall is shared on its full length by the separated rooms. the rooms can communicate through doors, which are positioned in the middle of Wils. there are no outdoor doors.


Door
|
XX
X. X measured from within the room
Door-... -- wallare 3 points wide
X. X __
XXXXX |
| ___ Wallare one point thick
Figure 2. A room with 3 doors
Your problem is to paint all rooms of a maze which can be visited starting from a given room, called the 'start room' which is marked by a star ('*') positioned in the middle of the room. A room can be visited from another room if there is a door on the wall which separates the room. by convention, a room is painted if its entire surface, including the doors, is marked by the character '#' as shown in figure 1b.


Input
The program input is a text file structured as follows:

1.
The first line contains a positive integer which shows the number of mazes to be painted.
2.
The rest of the file contains the mazes.
The lines of the input file can be of different length. the text which represents a maze is terminated by a separation line full of underscores ('_'). there are at most 30 lines and at most 80 characters in a line for each maze

The program reads the mazes from the input file, paints them and writes the painted mazes on the standard output.


Output
The output text of a painted maze has the same format as that which has been read for that maze, including the separation lines. the example below between strates a simple input which contains a single maze and the corresponding output.

Sample Input
2
XXXXXXXXX
X
X * X
X
XXXXXXXXX
X
X
X
XXXXX
_____
XXXXX
X
X * X
X
XXXXX
_____

Sample Output
XXXXXXXXX
X ### X
X ###### X
X ### X
XXXXXXXXX
X
X
X
XXXXX
_____
XXXXX
X ### X
X ### X
X ### X
XXXXX
_____

 


Starting from a vertex *, fill in all the spaces adjacent to it #. A simple DFS bare question

 

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<queue>using namespace std;char str[35][100];int visit[35][100],x,y;int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};void dfs(int x, int y){    int nx,ny,i;    for (i=0; i<4; i++)    {        nx=x+dir[i][0];        ny=y+dir[i][1];        if (!visit[nx][ny] && str[nx][ny]==' ')        {            visit[nx][ny]=1;            str[nx][ny]='#';            dfs(nx,ny);        }    }}int main (){    int i,j,t,sx,sy;    cin>>t;    x=0;    getchar();    while(t)    {        memset(visit,0,sizeof(visit));        gets(str[x++]);        bool flag=false;        if (str[x-1][0]=='_')        {            t--;            for (i=0; i<x; i++)            {                for (j=0; j<strlen(str[i]); j++)                    if (str[i][j]=='*')                    {                        sx=i;                        sy=j;                        flag=true;                        break;                    }                if (flag) break;            }            visit[sx][sy]=1;            str[sx][sy]='#';            dfs(sx,sy);            for (i=0; i<x; i++)                puts(str[i]);            x=0;        }    }    return 0;}

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.