uva 784 Maze Exploration(DFS遍历图)
2013-08-01 00:06
218 查看
Maze Exploration |
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
[align=center]Figure 2. A room with 3 doors[/align]
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 simpleinput 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,遍历的同时直接修改map.
#include<stdio.h> #include<string.h> #define N 105 char str ; int n, m; const int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; void DFS(int a, int b){ str[a][b] = '#'; for (int i = 0; i < 4; i++){ int p = a + dir[i][0], q = b + dir[i][1]; if (p < 0 || p >= n) continue; if (q < 0 || q >= m) continue; if (str[p][q] == 'X') continue; if (str[p][q] == '#') continue; DFS(p, q); } } void find(){ for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (str[i][j] == '*'){ DFS(i, j); return ; } } int main(){ int t; scanf("%d%*c", &t); while (t--){ // Init. memset(str, 0, sizeof(str)); n = 0; // Read. while (gets(str ) != NULL){ if (strcmp(str , "_____") == 0) break; n++; } // Handle. m = strlen(str[0]); find(); // Printf. for (int i = 0; i < n; i++) puts(str[i]); puts("_____"); } return 0;}
相关文章推荐
- UVa 548 Tree 根据后序遍历和中序遍历建树后DFS
- UVa 548 - Tree【二叉树的递归遍历(DFS)】
- UVa 548(二叉树的递归遍历、dfs)
- The Monocycle-uva 多状态DFS遍历
- UVA1600 Dfs回溯完全遍历+记忆化搜索(用最小距离剪枝)+细节处理 (值得复习)(水)
- UVa 699 The Falling Leaves (DFS遍历二叉树)
- uva 784 Maze Exploration(DFS遍历图)
- uva 657 The die is cast(DFS遍历图)
- uva 1103 - Ancient Messages(象!形!文!字! dfs遍历计数)
- uva 572 Oil Deposits(DFS遍历图)
- uva548 比较经典的知道两种遍历序列构造二叉树,注意后面的dfs的回溯
- leetcode 235. Lowest Common Ancestor of a Binary Search Tree 二叉搜索树BST的最近公共祖先LCA + 深度优先遍历DFS
- uva10317(dfs)
- UVA 572(简单的dfs)
- UVA 669 Defragment(dfs)
- uva 122 树的层次遍历
- 深度优先遍历DFS
- UVA 10417 - Gift Exchanging(概率 DFS)
- 数据结构之图的遍历(BFS+DFS)
- UVA 839 - Not so Mobile(dfs就可以)