By filling a rectangle with slashes (/) and backslashes ( ), you can generate nice
little mazes. Here is an example:

As you can see, paths in the maze cannot branch, so the whole maze only contains cyclic paths and paths entering somewhere and leaving somewhere else. We are only interested in the cycles. In our example, there
are two of them.

Your task is to write a program that counts the cycles and finds the length of the longest one. The length is defined as the number of small squares the cycle consists of (the ones bordered by gray lines in the
picture). In this example, the long cycle has length 16 and the short one length 4.

Input

The input contains several maze descriptions. Each description begins with one line containing two integersw and h ( ),
the width and the height of the maze. The next h lines represent the maze itself, and contain w characters each; all these characters will be either ``/" or ``\".

The input is terminated by a test case beginning with w = h = 0. This case should not be processed.

Output

For each maze, first output the line ``Maze #n:'', where n is the number of the maze. Then, output the line ``kCycles; the longest has length l.'',
where k is the number of cycles in the maze and l the length of the longest of the cycles. If the maze does not contain any cycles, output the line ``There are no cycles.".

Output a blank line after each test case.

Sample Input

6 4
\//\\/
\///\/
//\\/\
\/\///
3 3
///
\//
\\\
0 0

Sample Output

Maze #1:
2 Cycles; the longest has length 16. Maze #2:
There are no cycles.
#include <cstdio>
#include <cstring> char maze[150][150];
int visit[150][150];
int m,n,length; void findCircle(int i,int j)
{
if(i<0 || j<0 || i>=2*n || j>=2*m)
{
length=0;
return;
}
if(maze[i][j]!=0 || visit[i][j]==1)
return;
visit[i][j]=1;
length++;
findCircle(i-1,j);
findCircle(i,j-1);
findCircle(i,j+1);
findCircle(i+1,j);
if(!(maze[i-1][j]=='/' || maze[i][j-1]=='/'))
findCircle(i-1,j-1);
if(!(maze[i+1][j]=='/' || maze[i][j+1]=='/'))
findCircle(i+1,j+1);
if(!(maze[i+1][j]=='\\' || maze[i][j-1]=='\\'))
findCircle(i+1,j-1);
if(!(maze[i][j+1]=='\\' || maze[i-1][j]=='\\'))
findCircle(i-1,j+1);
} int main()
{
int maxLength,count,num=0;
while(scanf("%d%d",&m,&n)==2 && m!=0)
{
num++;
maxLength=count=0;
memset(maze,0,sizeof(maze));
memset(visit,0,sizeof(visit));
getchar();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
char c=getchar();
if(c=='/')
{
maze[i*2][j*2+1]='/';
maze[i*2+1][j*2]='/';
}
if(c=='\\')
{
maze[i*2][j*2]='\\';
maze[i*2+1][j*2+1]='\\';
}
}
getchar();
}
for(int i=0;i<n*2;i++)
for(int j=0;j<m*2;j++)
{
if(!maze[i][j] && !visit[i][j])
{
length=0;
findCircle(i,j);
if(length!=0)
count++;
if(maxLength<length)
maxLength=length;
}
}
printf("Maze #%d:\n",num);
printf(count==0?"There are no cycles.\n\n":"%d Cycles; the longest has length %d.\n\n",count,maxLength);
}
return 0;
}

705 - Slash Maze的更多相关文章

  1. UVA 705 Slash Maze

     Slash Maze  By filling a rectangle with slashes (/) and backslashes ( ), you can generate nice litt ...

  2. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  3. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  4. ACM训练计划step 1 [非原创]

    (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...

  5. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  6. Backtracking algorithm: rat in maze

    Sept. 10, 2015 Study again the back tracking algorithm using recursive solution, rat in maze, a clas ...

  7. 1Z0-053 争议题目解析705

    1Z0-053 争议题目解析705 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 705.View Exhibit1 to examine the DATA disk group ...

  8. Crontab中的除号(slash)到底怎么用?

    crontab 是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash)的使用,那么这个除号到底标示什么意思,使用中有哪些需要注意的地方呢?   在定时任务中,我们经常有这样的 ...

  9. (期望)A Dangerous Maze(Light OJ 1027)

    http://www.lightoj.com/volume_showproblem.php?problem=1027 You are in a maze; seeing n doors in fron ...

随机推荐

  1. NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别

    NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别 1. Interop含义Interop是互操作的含义.Microsoft.Off ...

  2. 关于android应用闪屏的几种情况

    1.主菜单进入某应用闪屏: 常见是一个空的activity作为launcher属性,实际上它什么事业没干,真正干事情的是从它通过intent启动的activity. 例子: public class ...

  3. Android Studio使用教程图文详解

    谷歌表示Android Studio 1.0 能让开发者“更快更有生产力”,并认为它可以代替 Eclipse,同时为Eclipse 用户提供迁移步骤.代码自动提示.运行响应速度.都比Eclipse来的 ...

  4. <body>标签,网页上显示的内容放在这里

    在网页上要展示出来的页面内容一定要放在body标签中.如下图是一个新闻文章的网页. 在浏览器中的显示效果: 示例: <!DOCTYPE HTML> <html> <hea ...

  5. 【USACO 1.4.1】铺放矩形块

    [描述] 给定4个矩形块,找出一个最小的封闭矩形将这4个矩形块放入,但不得相互重叠.所谓最小矩形指该矩形面积最小.               所有4个矩形块的边都与封闭矩形的边相平行,图1示出了铺放 ...

  6. input, textarea,监听输入事件

    IE使用'propertychange'事件监听,其它浏览器使用'input'事件测试了IE7-10, Chrome, FF, 输入没有问题.♥但在IE9下,  删除,  回退,  Ctrl+X 没有 ...

  7. jQuery 使用 jQuery UI 部件工厂编写带状态的插件(翻译)

    首先,我们要创建一个progress bar,它只允许我们简单的设置进度值.正如我们接下来将要看到的,我们需要通过调用 jQuery.widget 及其两个参数来实现这一操作,这两个参数分别是:将要创 ...

  8. [HTML5 Canvas学习]绘制矩形

    1.使用strokeRect和fillRect方法绘制矩形 a.strokeRect是绘制一个不填充的矩形 b.fillRect是绘制一个填充的矩形 代码: <script> var ca ...

  9. ES5数组方法

    先标明参考出处: http://blog.csdn.net/codebistu/article/details/8049705 本来写过一篇有关数组新方法的(详见: [转]JavaScript函数和数 ...

  10. eval("表达式")

    eval就是把字符串转成可执行代码eval("表达式");表达式被翻译成JavaScript代码执行比如eval("alert('test')");等于aler ...