UVA 705-Slash Maze
来源:互联网 发布:建站abc 收费 编辑:程序博客网 时间:2024/05/16 07:33
UVA 705-Slash Maze
题目大意:由/和\形成迷宫,求有几个回路和最大回路的路长
解题思路:把一个格子扩大俩倍,然后dfs求解
#include <stdio.h>#include <iostream>#include <string.h>using namespace std;int map[400][400];char ch[100][100];int flag[400][400];int w, h;int o1, o2;int sum, len;int dir[8][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};void change() { for(int i = 0; i < h; i++) for(int j = 0; j < w; j++) { if(ch[i][j] == '\\') { map[i*2][j*2] = 1; map[i*2+1][j*2+1] = 1; } else if(ch[i][j] == '/') { map[i*2+1][j*2] = 2; map[i*2][j*2+1] = 2; } } w = w * 2; h = h * 2;}void dfs(int a, int b, int l) { l++; flag[a][b] = 1; for(int i = 0; i < 4; i++) { if(a + dir[i][0] >= 0 && a + dir[i][0] < h && b + dir[i][1] >= 0 && b + dir[i][1] < w) { int p = a + dir[i][0], q = b + dir[i][1]; if(map[p][q] == 0) { if(flag[p][q] == 0) dfs(p, q, l); else if(p == o1 && q == o2 && l >= 4) { sum++; if(l > len) len = l; } } } } for(int i = 4; i < 8; i++) { if(a + dir[i][0] >= 0 && a + dir[i][0] < h && b + dir[i][1] >= 0 && b + dir[i][1] < w) { int p = dir[i][0], q = dir[i][1]; int k; if(p * q == 1) k = 2; else if(p * q == -1) k = 1; if((map[a+p][b] != k || map[a][b+q] != k) && map[a+p][b+q] == 0) { if(flag[a+p][b+q] == 0) dfs(a+p,b+q, l); else if(a + p == o1 && b + q == o2 && l >= 4) { sum++; if(l > len) len = l; } } } }}int main() { int n = 0; while(cin >> w >> h && w + h != 0) { getchar(); sum = 0; len = 0; n++; for(int i = 0; i < h; i++) gets(ch[i]); memset(map, 0, sizeof(map)); memset(flag, 0, sizeof(flag)); change(); // 把h和w也改了 for(int i = 0; i < h; i++) for(int j = 0; j < w; j++) { if(flag[i][j] == 0 && map[i][j] == 0) { o1 = i; o2 = j; dfs(i, j, 0); } } printf("Maze #%d:\n", n); if(sum == 0) printf("There are no cycles.\n"); else printf("%d Cycles; the longest has length %d.\n", sum, len); printf("\n"); } return 0;}
0 0
- uva 705 - Slash Maze
- uva 705 - Slash Maze
- uva 705 - Slash Maze
- uva 705 - Slash Maze
- UVa 705 - Slash Maze
- UVA 705 - Slash Maze
- uva 705Slash Maze
- UVA 705 Slash Maze
- uva 705 Slash Maze
- Slash Maze(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
- UVA 705 - Slash Maze
- UVA - 705 Slash Maze
- Linux常用命令20个
- Fibonacci Again
- byte[] int[] short[] 转换
- 图片出错
- mybatis Parameter index out of range (1 > number of parameters, which is 0)
- UVA 705-Slash Maze
- hihihihi
- java邮件发送代码编写
- Eclipse的Peiodic workspace save问题
- js插件开发规范
- Hibernate的一级和二级缓存
- 遗失的美好时光
- HDU 5828 多校第八场 1008 Rikka with Sequence(线段树--数据加强版)
- Unreal UI蓝图信息传递