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. HTML5 ArrayBuffer:类型化数组 (二)

    类型化数组是JavaScript操作二进制数据的一个接口. 这要从WebGL项目的诞生说起,所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的.实时的数据交 ...

  2. 使用GitBook编写文档

    GitBook 简介 GitBook 是一个通过 Git 和 Markdown 来撰写书籍的工具,最终可以生成 3 种格式: 静态站点:包含了交互功能(例如搜索.书签)的站点 PDF:PDF 格式的文 ...

  3. JavaScript--垃圾回收器

    垃圾回收: 释放不再被任何变量引用的对象 垃圾回收器: 专门记录对象的引用次数,并回收不再被引用的对象的程序. 垃圾回收器和主程序并行在后台执行 垃圾回收器会为每个对象创建一个引用计数器(counte ...

  4. 模拟vector

    实现了vector的模板,insert, erase, push_back, iterator #include<iostream> #include<string.h> #i ...

  5. Android学习----打印日志Log

    Log.v(tag,msg);所有内容 Log.d(tag,msg);debug Log.i(tag,msg);一般信息 Log.w(tag,msg);警告信息 Log.e(tag,msg);错误信息 ...

  6. jquery 的日期时间控件(年月日时分秒)

    <!-- import package --> <script type="text/javascript" src="JS/jquery.js&quo ...

  7. linux常用svn命令(转载)

     原地址:http://www.rjgc.net/control/content/content.php?nid=4418       1.将文件checkout到本地目录svn checkout p ...

  8. JQUERY1.9学习笔记 之内容过滤器(二) 空元素选择器

    描述:选择没有子元素(包括文本节点)的标签. jQuery(":empty") 与:parent相反. 例:找出所有为空的元素.(他们没有子元素或文本元素). <!docty ...

  9. ECharts 是一款开源

    ECharts

  10. win10 64bit 安装scrapy-1.1

    0.环境说明 win10 64bit,电脑也是64bit的处理器,电脑装有vs2010 64bit,但是为了保险起见,只试验了32位的安装,等有时间了,再试下64位的安装.如无特殊说明,一切操作都是在 ...