- 浏览: 39118 次
- 性别:
- 来自: 北京
最新评论
-
andyshar:
请问如何在现有的hadoop环境中安装?
Hadoop集群监控系统Ambari安装 -
qingtangpaomian:
失败123 写道您好楼主: 我装好之后为啥老是最后一 ...
Hadoop集群监控系统Ambari安装 -
失败123:
您好楼主: 我装好之后为啥老是最后一步Cluster ...
Hadoop集群监控系统Ambari安装
原创文章转载请注明出处
摘要:动态规划
一. 题目翻译
1. 描述:
农夫John在外面的田野上搭建了一个巨大的用栅栏围成的迷宫。幸运的是,他在迷宫的边界上留出了两段栅栏作为迷宫的出口。更幸运的是,他所建造的迷宫是一个“完美的”迷宫:即你能从迷宫中的任意一点找到一条走出迷宫的路。给定迷宫的宽度W(1<=W<=38)及高度H(1<=H<=100)。 2*H+1行,每行2*W+1的字符以下面给出的格式表示一个迷宫。然后计算从迷宫中最“糟糕”的那一个点走出迷宫所需的步数(就是从最“糟糕”的一点,走出迷宫的最少步数)。(即使从这一点以最优的方式走向最靠近的出口,它仍然需要最多的步数)当然了,牛们只会水平或垂直地在X或Y轴上移动,他们从来不走对角线。每移动到一个新的方格算作一步(包括移出迷宫的那一步)这是一个W=5,H=3的迷宫:
如上图的例子,栅栏的柱子只出现在奇数行或奇数列。每个迷宫只有两个出口。
2. 格式:
INPUT FORMAT:
(file maze1.in)
第一行: W和H(用空格隔开)
第二行至第2 * H + 1行: 每行2 * W + 1个字符表示迷宫
OUTPUT FORMAT:
(file maze1.out)
输出一个单独的整数,表示能保证牛从迷宫中任意一点走出迷宫的最小步数。
SAMPLE INPUT:
5 3
+-+-+-+-+-+
| |
+-+ +-+ + +
| | | |
+ +-+-+ + +
| | |
+-+ +-+-+-+
SAMPLE OUTPUT:
9
二. 题解
1. 题意理解(将问题分析清楚,大致用什么思路):
我们首先从输入输出中查找出迷宫的两个入口,然后以这两个入口为起点做floodfill为每个点产生同入口之间距离。然后遍历整个迷宫找出距离最远的输出即可。
2. 具体实现(具体实现过程中出现的问题):
floodfill图论当中的基本问题,注意积累一下。
三. 代码
/* ID:fightin1 LANG:JAVA TASK:maze1 */ package session_2_4_2; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.util.Scanner; public class maze1 { public static void main(String[] args) throws Exception { Scanner in = new Scanner(System.in); PrintWriter pw = new PrintWriter(System.out); // Scanner in = new Scanner(new BufferedReader(new FileReader( // "maze1.in"))); // PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter( // "maze1.out"))); int width = in.nextInt(); int height = in.nextInt(); in.nextLine(); char[][] maze = new char[2 * height + 1][2 * width + 1]; int[][] cnt = new int[2 * height + 1][2 * width + 1]; int x1 = 0, y1 = 0; int x2 = 0, y2 = 0; for (int i = 0; i < 2 * height + 1; i++) { String line = in.nextLine(); for (int j = 0; j < 2 * width + 1; j++) { char temp = line.charAt(j); maze[i][j] = temp; cnt[i][j] = Integer.MAX_VALUE; if (temp == ' ') { int tempx = 0; int tempy = 0; if (i == 0) { tempx = i + 1; tempy = j; } if (i == 2 * height) { tempx = i - 1; tempy = j; } if (j == 0) { tempx = i; tempy = j + 1; } if (j == 2 * width) { tempx = i; tempy = j - 1; } if (tempx!=0||tempy!=0){ if (x1 == 0 && y1 == 0) { x1 = tempx; y1 = tempy; } else { x2 = tempx; y2 = tempy; } } } } } cnt[x1][y1] = 1; flood(x1, y1, cnt, maze, width, height); cnt[x2][y2] = 1; flood(x2, y2, cnt, maze, width, height); int max = 0; for (int i = 1; i < 2 * height + 1; i += 2) { for (int j = 1; j < 2 * width + 1; j += 2) { int temp = cnt[i][j]; if (cnt[i][j] != Integer.MAX_VALUE) { if (max < cnt[i][j]) { max = cnt[i][j]; } } } } pw.println(max); pw.close(); } public static void flood(int x, int y, int[][] cnt, char[][] maze, int width, int height) { if (cnt[x][y] != 0) { if (x + 2 < 2 * height + 1 && maze[x + 1][y] == ' ') { if (cnt[x + 2][y] > cnt[x][y] + 1) { cnt[x + 2][y] = cnt[x][y] + 1; flood(x + 2, y, cnt, maze, width, height); } } if (x - 2 >= 0 && maze[x - 1][y] == ' ') { if (cnt[x - 2][y] > cnt[x][y] + 1) { cnt[x - 2][y] = cnt[x][y] + 1; flood(x - 2, y, cnt, maze, width, height); } } if (y + 2 < 2 * width + 1 && maze[x][y+1] == ' ') { if (cnt[x][y + 2] > cnt[x][y] + 1) { cnt[x][y + 2] = cnt[x][y] + 1; flood(x, y + 2, cnt, maze, width, height); } } if (y - 2 >= 0 && maze[x][y-1] == ' ') { if (cnt[x][y - 2] > cnt[x][y] + 1) { cnt[x][y - 2] = cnt[x][y] + 1; flood(x, y - 2, cnt, maze, width, height); } } } } }
发表评论
-
USACO - 3.2.2 - Stringsobits
2012-08-23 16:02 837原创文章转载请注明 ... -
USACO - 3.2.1 - Factorials
2012-08-23 16:01 731原创文章转载请注明出处 摘要:动态规划 ... -
USACO - 3.1.6 - Stamps
2012-08-23 16:01 1084原创文章转载请注明 ... -
USACO - 3.1.5 - Contact
2012-08-23 16:01 952原创文章转载请注明出处 摘要:二叉树的应用 , ... -
USACO - 3.1.3 - Humble Numbers
2012-08-23 16:00 749原创文章转载请注明 ... -
USACO - 3.1.2 - Score Inflation
2012-08-22 10:05 947原创文章转载请注明出处 摘要:动态规划 ... -
USACO - 3.1.1 - Agri-Net
2012-08-22 10:04 899原创文章转载请注明出处 摘要:Prim算法 , ... -
USACO - 2.4.5 - Fractions to Decimals
2012-08-22 10:04 990原创文章转载请注明出处 摘要:模拟 , 数论 ... -
USACO - 2.4.4 - Bessie Come Home
2012-08-22 10:04 984原创文章转载请注明出处 摘要:Dijkstra ... -
USACO - 2.4.1 - The Tamworth Two
2012-08-21 10:37 754原创文章转载请注明出处 摘要:模拟 ... -
USACO - 2.3.5 - Controlling Companies
2012-08-21 10:37 1345原创文章转载请注明出处 摘要:BFS , 模拟 ... -
USACO - 2.3.4 - Money Systems
2012-08-21 10:37 894原创文章转载请注明 ... -
USACO - 2.3.3 - Zero Sum
2012-08-21 10:36 768原创文章转载请注明出处 摘要:dfs , 枚举 ... -
USACO - 2.3.2 - Cow Pedigrees
2012-08-21 10:36 1032原创文章转载请注明 ... -
USACO - 2.3.1 - Longest Prefix
2012-08-20 20:31 1066原创文章转载请注明 ... -
USACO - 2.2.4 - Party Lamps
2012-08-20 20:30 1247原创文章转载请注明出处 摘要:枚举,三星 ... -
USACO - 2.2.3 - Runaround Numbers
2012-08-20 20:30 687原创文章转载请注明 ... -
USACO - 2.2.2 - Subset Sums
2012-08-20 20:30 732原创文章转载请注明出处 摘要:动态规划 ,0- ... -
USACO - 2.2.1 - Preface Numbering
2012-08-20 20:29 917原创文章转载请注明出处 摘要:模拟 , 数学分析 ... -
USACO - 2.1.5 - Hamming Codes
2012-08-18 19:22 811原创文章转载请注明出处 摘要:枚举、暴力 ...
相关推荐
【标题】USACO-Bessie-Come-Home.zip_Home Home 【正文】 这个压缩包文件中的内容是关于USACO(美国计算机奥林匹克)竞赛中一个名为"Bessie Come Home"的问题的C++解决方案。USACO是一个针对高中生的在线编程竞赛...
【标题】USACO-beads.rar_usaco bea 【正文】 USACO(美国计算机奥林匹克竞赛)是一项针对中学生举办的编程比赛,旨在培养和选拔未来的计算机科学家。在这个特定的题目"beads"中,我们需要解决的问题是找到最长的...
"USACO-Chapter2.rar_beginners" 是针对USACO第二章内容的压缩包,特别适合编程新手入门。 在USACO的第二章,主要涉及基础的算法和数据结构,这对于构建扎实的编程基础至关重要。让我们逐一解析这个压缩包中的四个...
《USACO魔法方阵:C++编程解析》 USACO(美国计算机奥林匹克)是一项旨在培养高中生计算机科学技能的竞赛。在这个问题中,我们关注的是“Magic Squares”,这是一个经典的数学概念,与C++编程相结合,构成了一个...
【标题】"usaco-1.rar_barn1" 涉及的是USACO(美国计算机奥林匹克)竞赛中的一道编程题目,名为“Barn1”。USACO是一个旨在提升中学生计算机科学技能的比赛,主要关注算法和编程。在本题中,参赛者需要解决与农业或...
《USACO入门指南——第一章解析》 USACO,全称USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在培养中学生在算法和编程方面的技能。对于初学者来说,USACO提供了很好的学习路径和挑战。本文将针对USACO的第...
USACO(USA Computing Olympiad)是一项面向美国高中生的在线编程竞赛,旨在培养参赛者的算法设计和编程技能。在"Greedy Gift Givers"这个题目中,我们面对的是一个贪心算法的应用问题。贪心算法是一种解决问题的...
资源包包括USACO 2001-2007年月赛的测试数据;usaco月赛十年题典(2000-2009),usaco月赛2002-2008题解。单独下载需资源分30分以上。为了方便编程爱好者,我这边统一下载打包。欢迎下载。
这个名为"USACO-Training-Website:我的USACO培训网站解决方案"的压缩包文件,显然包含了作者对USACO训练网站上部分或所有章节的练习题目的解答。这些解答可能以源代码的形式存在,每个文件顶部可能带有详细的USACO...
这个"USACO-Practice"压缩包文件显然是为了帮助参赛者或者对算法有兴趣的学生准备的实践资源。以下我们将深入探讨USACO竞赛的相关知识点以及可能在压缩包中包含的编程内容。 1. **基础算法**:USACO竞赛通常会涉及...
在这个“USACO-Training-Pages”压缩包中,我们可以期待找到与USACO竞赛相关的各种资料,尤其是针对Java语言的学习材料。Java作为一种广泛应用于计算机科学领域的面向对象的编程语言,因其强大的跨平台能力和简洁的...
本压缩包“Notes-USACO-2021-Spring”中的笔记主要聚焦于2021年春季训练营和比赛的知识点,对于想要深入学习算法和提升编程能力的爱好者来说,具有极高的学习价值。 笔记内容可能包括但不限于以下几个方面: 1. **...
"C-Usaco-Work"指的是一个针对Usaco(美国计算机奥林匹克)教程的项目,这个项目专门用于帮助参赛者学习如何在C语言环境下进行竞赛编程。Usaco是一项面向高中生的国际性计算机科学竞赛,旨在提高参赛者的算法设计、...
【USACO-Cpp】是针对USACO(美国计算机奥林匹克竞赛)的C++编程教程资源,主要面向参赛者提供C++语言的学习材料,帮助他们在比赛中解决算法和数据结构问题。USACO是一项旨在提升高中生计算机科学技能的比赛,强调...
这是USACO2001-2007月赛全集。 usaco是美国中学生的官方竞赛网站。是美国著名在线题库,专门为信息学竞赛选手准备。推荐直接阅读英语原文,既准确可靠又可提高英语水平。做题方式模拟正式比赛,采用标准测评机、文件...
在这个“usaco-java-gold”主题中,我们将深入探讨Java在USACO黄金级别比赛中的应用,以及如何解决相关问题。 一、Java语言基础 1. 类与对象:Java是一种面向对象的语言,理解和熟练运用类和对象是解决USACO问题的...
### USACO 2010-2011 季度竞赛概览与关键信息 #### 一、概述 美国计算机奥林匹克(USACO)是面向全球中学生的计算机科学竞赛,旨在发掘并培养计算机科学领域的年轻人才。USACO 2010-2011 季度竞赛于 2010 年 11 月...
USACO-TurtleCamera 该存储库包含我对USACO问题的所有解决方案。 CSE 199工作区目录将是我用来帮助开发USACO课程的主要目录。
我的USACO题解和程序
《USACO-Guide》是面向参赛者,特别是那些对美国计算机奥林匹克竞赛(USACO)感兴趣的编程爱好者的一份重要资源。USACO是美国一项旨在提升高中生编程技能的竞赛,它涵盖了算法、数据结构以及问题解决等多个方面的...