`
249326109
  • 浏览: 56129 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

uva 705 - Slash Maze

    博客分类:
  • acm
 
阅读更多

开始无从下手,后来参考了别人的思路 http://blog.csdn.net/shuangde800/article/details/7726620

有了思路后不知道怎么求环,后来发现题目说了没岔路。。

 

#include<stdio.h>
#include<string.h>
#define MAX 200

int w, h;
char maze[MAX][MAX];
int cases = 1;
int isCircle;
int num;
int circleCount;
int maxLen;
int hasCircle;

int dir[8][2] = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 }, { -1, -1 },
		{ -1, 1 }, { 1, -1 }, { 1, 1 } };

int pass(int i, int j, int k) {
	if (k < 4)
		return 1;
	int x = i + dir[k][0];
	int y = j + dir[k][1];
	if (x >= 0 && y >= 0 && maze[x][j] == '\\' && maze[i][y] == '\\'
			&& (k == 5 || k == 6))
		return 0;

	if (x >= 0 && y >= 0 && maze[x][j] == '/' && maze[i][y] == '/'
			&& (k == 4 || k == 7))
		return 0;

	return 1;

}

void dfs(int i, int j) {
	if (i < 0 || j < 0 || i >= 2 * h || j >= 2 * w) {
		isCircle = 0;
		return;
	}
	if (maze[i][j] == '*' || maze[i][j] == '\\' || maze[i][j] == '/')
		return;

	maze[i][j] = '*';
	num++;

	int k;
	for (k = 0; k < 8; k++) {
		if (pass(i, j, k)) {
			dfs(i + dir[k][0], j + dir[k][1]);
		}

	}

}

int main() {

	while (scanf("%d%d", &w, &h) != EOF) {
		if (w == 0)
			break;
		memset(maze, 0, sizeof(maze));
		getchar();
		int i, j;
		char ch;
		for (i = 0; i < h; i++) {
			for (j = 0; j < w; j++) {
				scanf("%c", &ch);
				if (ch == '\\') {
					maze[2 * i][2 * j] = '\\';
					maze[2 * i + 1][2 * j + 1] = '\\';
				} else if (ch == '/') {
					maze[2 * i][2 * j + 1] = '/';
					maze[2 * i + 1][2 * j] = '/';
				}

			}
			getchar();

		}

		circleCount = 0;
		maxLen = -1;
		hasCircle = 0;
		for (i = 0; i < 2 * h; i++)
			for (j = 0; j < 2 * w; j++) {
				if (maze[i][j] == 0) {
					num = 0;
					isCircle = 1;
					dfs(i, j);

					if (isCircle && num >= 4) {
						hasCircle = 1;
						circleCount++;
						if (num > maxLen)
							maxLen = num;
					}

				}
			}

		printf("Maze #%d:\n", cases++);
		if (hasCircle) {
			printf("%d Cycles; the longest has length %d.\n\n", circleCount,
					maxLen);
		} else {
			printf("There are no cycles.\n\n");
		}

	}

	return 0;
}

 

 

 

 

分享到:
评论

相关推荐

    uva705-Slash-Maze-.rar_Slash_uva705

    【标题】"uva705-Slash-Maze-.rar_Slash_uva705" 指向的是一个在UVa Online Judge (UVa OJ) 上提交并通过的编程问题,具体为问题编号705,名为"Slash Maze"。这个压缩包很可能包含了该问题的解决方案源代码。 ...

    tutorial-dark-slash-master

    通过"tutorial-dark-slash-master"项目,学习者将了解游戏开发的基本构成,包括游戏场景、角色、敌人、碰撞检测、动画以及用户交互等元素。这一步骤是理解游戏开发流程的关键。 3. **项目结构分析** 项目的文件...

    Laravel开发-phpnet-laravel-trailing-slash

    在压缩包文件`phpnet-laravel-trailing-slash-master`中,可能包含了示例代码或者一个示例项目,用于演示如何在Laravel中实现尾随斜杠的处理。你可能需要解压并查看这个项目的源代码,学习作者是如何处理这个问题的...

    PyPI 官网下载 | discord-ext-slash-0.3.0rc1.tar.gz

    《PyPI官网下载:探索discord-ext-slash-0.3.0rc1.tar.gz中的Python库奥秘》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了无数的开源Python库供全球开发者使用。本文将深入探讨标题中提到的...

    前端开源库-remove-trailing-slash

    `remove-trailing-slash-master` 压缩包文件可能是该开源库的源码仓库,包含项目的主分支代码。开发者可以将其克隆到本地,通过阅读源码理解其工作原理,或者直接在项目中引用库文件,利用其提供的API来删除字符串或...

    Python-vimslash加强缓冲的搜索体验

    `vim-slash`插件是Vim社区为提升搜索体验而开发的一个扩展,它为Vim带来了更加强大的缓冲区搜索功能,极大地提升了开发者的生产力。 ### 1. Vim-slash 插件介绍 `vim-slash` 是一个基于Vim的插件,它的主要目标是...

    tutorial-dark-slash-master.zip

    "tutorial-dark-slash-master"是整个项目的根目录,通常包含项目配置文件、资源、脚本、场景、精灵和其他相关文件。在这个压缩包中,你可能会看到如下的文件和文件夹: 1. `assets`:这个文件夹存放所有游戏的资源...

    discord-slash-commands:一个简单的软件包,可让您轻松地将bot的discord斜杠命令使用

    discord-slash-commands,一个易于使用的软件包 如何安装 这很简单! 只需运行`npm i @ daimond113 / discord-slash-commands`,您就完成了! 如何使用 首先,如果您遇到了麻烦,可以在上询问,或者查看您将需要一...

    hack-n-slash-sprint:最初在约12小时内创建的hack n'slash游戏

    《hack-n-slash-sprint: 12小时内构建的快节奏砍杀游戏》 在IT行业中,游戏开发是一项富有挑战性的任务,它涉及到编程、艺术设计、音效、动画等多个领域。"hack-n-slash-sprint"是一个由JavaScript语言开发的砍杀类...

    dot-slash-2:Clojure库,用于创建(开发)代理变量的名称空间

    dot-slash-2是的库版本,它是leiningen插件。 它使您可以创建具有其他名称空间代理的名称空间。 它以创建名为的命名空间的想法命名. 使用dev实用程序,可以从任何地方使用./foo语法访问它们,而无需任何操作。 ...

    u-slash:命令行脚本,可从Reddit用户提交的内容中下载唯一的文件

    斜线命令行脚本,可从Reddit用户提交的内容中下载唯一的文件安装$ git clone https://github.com/2yr434hgd7fy384/u-slash$ pip install u-slash/用法u-slash [OPTIONS] [USERNAMES]... DIRECTORYu-slash下载任意...

    discord-slash-commands:用于Discord的斜杠命令

    npm i discord-slash-commands 特征 可客制化 多命令支持 每个行会命令支持 例子 const Discord = require ( 'discord.js' ) ; const client = new Discord . Client ( ) ; const { Slash } = require ( 'discord-...

    connect-url-slash-sanitiser:从 URL 中删除双斜杠并使用 connect express 重定向

    连接-url-斜杠-消毒剂从你的快递网址中删除不必要的斜线的中间件安装 npm install connect-url-slash-sanitiser --save用法 var express = require('express');var urlSlashSanitiser = require('connect-url-slash-...

    discord-py-slash-command:一个简单的discord.py斜线命令处理程序,用于discord.py

    discord-py-slash-command是第一个为Discord Bot API库制作的公共斜杠命令处理程序库。 安装 您可以使用下面的给定PIP行轻松安装discord-py-slash-command库: pip install -U discord-py-slash-command 免责声明...

    discord-slash-bot:这个bot是一个简单的Discord Slash Bot

    欢迎来到Discord Slash Bot :waving_hand: 该机器人是一个简单的Discord Slash Bot。 :house: 用法 克隆回购 使用命令npm install或yarn安装依赖项 将.env.example重命名为.env并填写所需的空白 通过此邀请将漫游...

    hapi-trailing-slash:Hapi插件重定向到非跟踪斜杠URL

    hapi-trailing-slash# 一个插件,用于处理传入URL的常见尾随斜杠问题,以便my-route和my-route /具有一致的行为。安装npm install hapi-trailing-slash基本用途此插件将注册一个preResponse扩展名,该扩展名将在...

    tomcat-context-trailing-slash

    运行工作示例克隆示例,并使用以下版本在最新的Tomcat 8上运行: $ mvn clean package cargo:run 打开 笔记没有尾随/ 按登录按钮显示“ Hello”页面映射到/* 切换到slash-star分支,该分支将DispatcherServlet映射到...

    21-triple-slash-directives(三斜线指令21).pdf

    【三斜线指令】在TypeScript中是一种特殊的注释方式,用于向编译器提供元数据和指令。这些指令通常位于文件的顶部,且仅在那儿有效。它们以`///`开头,后面跟着一个XML标签。 ### 1....这是最常用的三斜线指令,用于...

    吉他谱_Anastasia - Slash.pdf

    初级新手入门吉他谱 guitar tab

    discord-slash-requests

    这里提到的项目"discord-slash-requests",是一个GitHub开源库,由windowsvistaiscool开发,用于帮助开发者在Python中轻松构建和管理Discord的Slash Commands。通过`git clone ...

Global site tag (gtag.js) - Google Analytics