UVA705
2014-07-27 00:14
232 查看
题目的意思就是根据输入,找出有几个封闭的空间,最大的有多少个格子(提纲中中的正方向格子);
首先要先把每个格子变成3 × 3的;
例如,第一个符号是 ‘ \ ’; 那么就是第一行第一个,第二行第二个,第三行第三个都被标记为1了。
输入完之后,找到空格子,也就是0的时候,开始dfs()只需要搜四个方向。如果找到了边界,并且不是斜杠(不是1),说明不是封闭的,是通到外界的,也就不计位封闭空间。。。
另外每次开始dfs后,递归的次数就是格子的数量,当然还要除以三。
AC代码:
首先要先把每个格子变成3 × 3的;
例如,第一个符号是 ‘ \ ’; 那么就是第一行第一个,第二行第二个,第三行第三个都被标记为1了。
输入完之后,找到空格子,也就是0的时候,开始dfs()只需要搜四个方向。如果找到了边界,并且不是斜杠(不是1),说明不是封闭的,是通到外界的,也就不计位封闭空间。。。
另外每次开始dfs后,递归的次数就是格子的数量,当然还要除以三。
AC代码:
#include<iostream> #include<stdio.h> #include<string> using namespace std; const int N = 1000; int maze[3 * N][3 * N]; bool vis[3 * N][3 * N]; bool cir; int n,m; int count; int d; int res; int T = 1; int dis[3 * N]; int t; void init () { cir = true; t = 0; d = 0; for (int i = 0; i < 3 * N;i++) { for (int j = 0; j < 3 * N ;j++) { maze[i][j] = 0; vis[i][j] = false; } dis[i] = 0; } } void dfs(int x, int y) { if (maze[x][y] == 1 || vis[x][y] == true) return ; if(x == 0 || y == 0 ||x == 3 * m - 1 ||y == 3 * n - 1) { cir = false; return ; } d++; vis[x][y] = true ; dfs(x - 1,y); dfs(x ,y - 1); dfs(x , y + 1); dfs(x + 1 , y); } int main () { while (cin >> n >> m ) { getchar(); if (n == 0 && m == 0) break; init(); char ch; for (int i = 0; i < 3 * m ;i += 3) { for (int j = 0 ; j < 3 * n ;j += 3) { ch = getchar(); if (ch == '/') { maze[i][j + 2] = 1; maze[i + 1][j + 1] = 1; maze[i + 2][j] = 1; } if (ch == '\\') { maze[i][j] = 1; maze[i + 1][j + 1] = 1; maze[i + 2][j + 2] = 1; } } getchar(); } for (int i = 0 ;i < 3 * m;i++) { for (int j = 0; j < 3 * n ;j++) { cir = true; d = 0; if (maze[i][j] == 0 && vis[i][j] == false) { dfs(i,j); if(cir == true) { // cout <<i<<" "<<j<<endl; dis[t++] = d / 3; } } } } int max = 0; for (int i = 0; i < t ;i++) { if (dis[i] > max) max = dis[i]; } res = max; cout <<"Maze #" <<T++<<":"<<endl; if(t == 0) cout <<"There are no cycles."<<endl<<endl; else cout << t <<" Cycles; the longest has length " << res <<"."<<endl<<endl; count = 0; } return 0; }
相关文章推荐
- Uva 705 - Slash Maze
- uva705
- UVa 705 - Slash Maze, 斜线迷宫
- Uva 705 - Slash Maze
- uva 705
- UVA 705 - Slash Maze
- uva 705
- uva705
- uva 705 Slash Maze
- UVA-705 Slash Maze
- uva 705
- UVA 705 Slash Maze
- UVa 705 - Slash Maze
- UVa705 Slash Maze(DFS)
- UVA 705-Slash Maze
- uva 705 Slash Maze 斜线迷宫
- uva 705 Slash Maze(斜线迷宫) —— DFS
- uva 705 Slash Maze
- Slash Maze(uva 705)
- uva 705 - Slash Maze