705 - Slash Maze
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的更多相关文章
- UVA 705 Slash Maze
Slash Maze By filling a rectangle with slashes (/) and backslashes ( ), you can generate nice litt ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- ACM训练计划step 1 [非原创]
(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- Backtracking algorithm: rat in maze
Sept. 10, 2015 Study again the back tracking algorithm using recursive solution, rat in maze, a clas ...
- 1Z0-053 争议题目解析705
1Z0-053 争议题目解析705 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 705.View Exhibit1 to examine the DATA disk group ...
- Crontab中的除号(slash)到底怎么用?
crontab 是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash)的使用,那么这个除号到底标示什么意思,使用中有哪些需要注意的地方呢? 在定时任务中,我们经常有这样的 ...
- (期望)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 ...
随机推荐
- Effective java-泛型思维导图
- 条件注释判断浏览器版本<!--[if lt IE 9]>(转载)
<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![ ...
- iOS 中Window优先级的问题
在项目中,视频播放时候遇到网络切换需要弹出AlertView提醒用户,忽然发现转屏的时候播放View加到KeyWindow的时候把AleryView挡住了.如图 因为转屏的时候视图是直接加载到 [UI ...
- Swift - 33 - 返回函数类型和函数嵌套
//: Playground - noun: a place where people can play import UIKit /*---------------------------返回函数类 ...
- Java Calendar 计算时间差
public static void main(String[] args) { Calendar c=Calendar.getInstance(); int y=2016;//年 int M=1;/ ...
- 汇编程序w=x*y+z-200
DATA SEGMENTX DW 1000Y DW 2000Z DW 3000W DW 2 DUP(?)DATA ENDSCODE SEGM ...
- 安装vs2013 Sqlserver 无法连接远程服务器的解决方法
以“管理员身份”启动cmd,执行“netsh winsock reset”命令.
- IE6的bug
借鉴http://css.doyoe.com/ 问题和经验列表,里面应有尽有.写几个常见的: 1.解决IE6及更早浏览器浮动时产生双倍边距的BUG display:inline 2.如何解决IE6下的 ...
- spring注解机制和XML配置机制之间的比较
XML配置的优缺点: 优点有:1. XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新编译.2. 在处理大的业务量的时候,用XML配置应该更加好一 ...
- webkit的基本应用
新建Qt Widgets Application->Browser01 修改.pro文件内容: #------------------------------------------------ ...