zoukankan      html  css  js  c++  java
  • [UVA] 784

      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
    _____
    

    题解:DFS,所到达的地方用“#”覆盖即可。注意建图和数据规模。“There are at most 30 lines and at most 80 characters in a line for each maze”

    代码:

      1 #include<stdio.h>
      2 #include<string.h>
      3 #include<stdbool.h>
      4 #include<stdlib.h>
      5 #include<ctype.h>
      6 
      7 #define rep(i,a,b)  for(i=(a);i<=(b);i++)
      8 #define red(i,a,b)  for(i=(a);i>=(b);i--)
      9 #define sqr(x)      ((x)*(x))
     10 #define clr(x,y)    memset(x,y,sizeof(x))
     11 #define LL          long long
     12 
     13 const dx[4]={0,0,1,-1};
     14 const dy[4]={1,-1,0,0};
     15 
     16 int i,j,n,m,num,li,
     17     b[100];
     18 
     19 char ch,a[100][100];
     20 
     21 bool can[100][100];
     22 
     23 void pre()
     24 {
     25     clr(can,0);
     26     clr(b,0);
     27     clr(a,'');
     28     num=0;li=0;;
     29 }
     30 
     31 int init()
     32 {
     33     int p;
     34     while(true)
     35     {
     36         li++;p=0;
     37         while((ch=getchar())!='
    ')
     38         {
     39             p++;
     40             a[li][p]=ch; 
     41         }
     42          
     43         b[li]=p;
     44     
     45         if(a[li][1]=='_') break;
     46     }
     47        
     48     rep(i,1,li)
     49         rep(j,1,b[i])
     50         if(a[i][j]!='X') can[i][j]=1;
     51        
     52     return 0;
     53 }
     54 
     55 void dfs(int xi,int yi)
     56 {
     57     int i,x,y;
     58     
     59     rep(i,0,3)
     60     {
     61         x=xi+dx[i];
     62         y=yi+dy[i];
     63         if(can[x][y])
     64         {
     65             a[x][y]='#';
     66             can[x][y]=0;
     67             dfs(x,y);
     68         }
     69     }
     70 }
     71     
     72 
     73 int work()
     74 {
     75     int i,j;
     76     rep(i,1,li)
     77         rep(j,1,b[i])
     78         if(a[i][j]=='*')
     79         {
     80             a[i][j]='#';
     81             can[i][j]=0;
     82             dfs(i,j);
     83         }
     84     
     85     return 0;
     86 }
     87 
     88 int main()
     89 {
     90     scanf("%d
    ",&n);
     91     while(n--)
     92     {
     93         pre();
     94         init();
     95         work();
     96         rep(i,1,li)
     97         {
     98             rep(j,1,b[i])
     99             printf("%c",a[i][j]);
    100         printf("
    ");
    101         }
    102     }
    103     return 0;
    104 }
  • 相关阅读:
    Linux高并发内核优化-TougheRadius
    Zabbix 4.0 配置邮件报警功能
    Zabbix Agent 4.0 Windows 安装配置
    zabbix4.0前端个性化设置
    zabbix 4.0中文图形界面乱码问题
    Zabbix4.0系统告警“More than 75% used in the configuration cache”
    Zabbix4.0配置SNMP监控
    Zabbix4.0 SNMP安装
    Zabbix4.0添加cisco交换机基本监控步骤
    深入.NET框架
  • 原文地址:https://www.cnblogs.com/sxiszero/p/3715345.html
Copyright © 2011-2022 走看看