您的位置:首页 > 其它

UVA 784-Maze Exploration(dfs)

2015-02-14 00:11 344 查看
Maze Exploration

A maze of rectangular rooms is represented on a two dimensional grid as illustrated in figure 1a. Each point of the grid is represented by a character. The points of room walls are 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.

XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX

X X X X X X X###X###X###X X X

X X X X X###########X X X

X X X X X X X###X###X###X X X

XXXXXX XXX XXXXXXXXXX XXXXXX#XXX#XXXXXXXXXX

X X X X X X X X###X###X###X###X

X X * X X X###############X

X X X X X X X X###X###X###X###X

XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX

a) Initial maze b) Painted maze

Figure 1. Mazes of rectangular rooms

All rooms of the maze are equal sized with all walls 3 points wide and 1 point thick as illustrated 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 walls. There are no outdoor doors.

door

|

XX XX

X . X measured from within the room

door - ...-- walls are 3 points wide

X . X__

XXXXX |

|___ walls are 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 rooms. 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 illustrates a simple input which contains a single maze and the corresponding output.

Sample Input

2

XXXXXXXXX

X X X

X * X

X X X

XXXXXXXXX

X X

X X

X X

XXXXX

_____

XXXXX

X X

X * X

X X

XXXXX

_____

Sample Output

XXXXXXXXX

X###X###X

X#######X

X###X###X

XXXXXXXXX

X X

X X

X X

XXXXX

_____

XXXXX

X###X

X###X

X###X

XXXXX

_____

题意:从“*”出发,讲能走到的空白处填满“#”

PS:情人节第一发,sad,wa10次,少了个等号,不知道为啥。sadddddd。难道是哪没想到?糊里糊涂的。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>

using namespace std;
char mp[110][110];
int vis[110][110];
int n,m;
int jx[]={-1,1,0,0};
int jy[]={0,0,-1,1};
void dfs(int x,int y)
{
int i;
for(i=0;i<4;i++){
int dx=x+jx[i];
int dy=y+jy[i];
if(mp[dx][dy]==' '&&!vis[dx][dy]){
vis[dx][dy]=1;
mp[dx][dy]='#';
dfs(dx,dy);
}
}
}
int main()
{
int T,i,j,k;
int cnt;
int flag;
scanf("%d",&T);
getchar();
while(T--){
memset(vis,0,sizeof(vis));
memset(mp,0,sizeof(mp));
cnt=0;
flag=0;
while (gets(mp[cnt])!=NULL){
if (strcmp(mp[cnt], "_____") == 0)
break;
cnt++;
}
for(i=0;i<cnt;i++){
for(j=0;j<strlen(mp[i]);j++){
if(mp[i][j]=='*'){
flag=1;
break;
}
}
if(flag)
break;
}
int xx=i;
int yy=j;
vis[xx][yy]=1;
mp[xx][yy]='#';
dfs(xx,yy);
for(k=0;k<=cnt;k++)//少了个等号,wa10次。我去
puts(mp[k]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: