uva 705
2010-08-10 18:09
316 查看
这道题是非常有意思的一道题,平常我们只在横竖之间徘徊,所以乍一看还真有些不会做,但事实上是真不会做,脑子一天总有些稀奇古怪的想法,但是当真正用到它们的时候,一个个全跑光了,太不仗义了,所以我去搜了下,发现竟然有人把一个点分成了四个,然后搜索。后来发现有更牛的,把一个点分成九个!这个太帅了,而且符合我的思想,所以就用它了。不管怎么样,他们都用到了一个思想,那就是把图给放大了,然后这些陌生的图就变为我们经常见到的东西。也就是说,不会斜的,我们可以把它给变直了,甚至可以把图给变成0和1这个总该会了吧?呵呵,崇拜一下下.......
#include <iostream> #include <cstring> using namespace std ; const int maxn = 75 + 10 ; bool visit[maxn * 3][maxn * 3] ;//标记是否走过 bool map[maxn * 3][maxn * 3] ;//存图 int dx[] = { -1 , 1 , 0 , 0 } ;//控制x方向 int dy[] = { 0 , 0 , -1 , 1 } ;//控制y方向 int r , c ;//行列 int cnt ;//保存圈数 int ans ;//保存最长圈长度 int cur ;//保存当前圈长度 bool out ;//标记是否出圈外 //初始化 void init() { memset( visit , false , sizeof( visit ) ) ; memset( map , false , sizeof( map ) ) ; cnt = 0 ; ans = -1 ; return ; } //判断该点是否为0并且还不能访问过 bool is_ok( int x , int y ) { if( visit[x][y] || map[x][y] ) return false ; return true ; } //判断是否出界 bool is_out( int x , int y ) { if( x < 0 || y < 0 || x >= 3 * r || y >= 3 * c ) return true ; return false ; } void dfs( int x , int y ) { if( is_out( x , y ) ) { out = true ; return ; }//如果出界,标记,并退出 if( ! is_ok( x , y ) ) return ;//如果不合法,退出 cur++ ;//长度加一 visit[x][y] = true ;//标记访问过 for( int i = 0 ; i < 4 ; i++ )//四个方向搜索 { int nx = x + dx[i] ; int ny = y + dy[i] ; dfs( nx , ny ) ; } } int main() { int icase = 1 ; while( cin >> c >> r ) { if( ! c && ! r ) break ; init() ; for( int i = 0 ; i < 3 * r ; i += 3 ) for( int j = 0 ; j < 3 * c ; j += 3 ) { char ch ; cin >> ch ; if( ch == '//' ) map[i][j] = map[i+1][j+1] = map[i+2][j+2] = true ; else if( ch == '/' ) map[i][j+2] = map[i+1][j+1] = map[i+2][j] = true ; } for( int i = 0 ; i < 3 * r ; i++ ) { for( int j = 0 ; j < 3 * c ; j++ ) { if( ! map[i][j] && ! visit[i][j] )//从没有访问过的零开始搜 { cur = 0 ;//每个圈的初始化 out = false ;//标记初始化 dfs( i , j ) ; if( ! out )//如果没出界,说明是一个圈 { if( cur > ans ) ans = cur ;//更新圈最长的长度 cnt++ ;//圈加一 } } } } cout << "Maze #" << icase++ << ":" << endl ; if( cnt ) cout << cnt <<" Cycles; the longest has length " << ans / 3 << "." << endl << endl ; else cout << "There are no cycles." << endl << endl ; } return 0 ; }
相关文章推荐
- uva705
- Uva 705 - Slash Maze
- UVa705 Slash Maze(DFS)
- Uva 705 - Slash Maze
- uva 705
- Slash Maze(uva 705)
- uva 705
- uva_705-Slash Maze
- UVA 705 Slash Maze
- uva 705 - Slash Maze
- UVA-705 Slash Maze
- UVa 705 - Slash Maze
- UVa 705 Slash Maze(DFS)(斜线构图)
- uva 705 Slash Maze(DFS)
- UVA705
- UVA 705-Slash Maze
- uva 705 Slash Maze 解题报告
- uva 705 - Slash Maze
- uva 705 - Slash Maze(斜线迷宫)
- uva 705 Slash Maze