【发布时间】:2013-03-14 05:22:10
【问题描述】:
我想练习一个问题,但我无法弄清楚如何为其编写递归算法。我有一个布局如下的文件:
4
(())
()((
(()(
))))
这个问题来自 USACO。 http://www.usaco.org/index.php?page=viewproblem2&cpid=189
问题陈述复制粘贴如下:
虽然 Bessie the cow 找到了每一串平衡的括号 在美学上令人愉悦,她特别喜欢她的弦乐 调用“完美”平衡 - 由 ('s 后面的字符串组成 由一串具有相同长度的 ) 组成。例如:
(((())))
有一天,贝西在穿过谷仓时发现了一个 N x N 网格 地面上的马蹄铁,每个马蹄铁的方向是这样的 它看起来像(或)。从左上角开始 这个格子,贝西想四处走走捡马蹄铁 她拿起的琴弦非常平衡。 请帮助她 计算她能找到的最长完美平衡弦的长度 获得。
在每一步中,Bessie 都可以向上、向下、向左或向右移动。她只能 移动到包含马蹄铁的网格位置,当她这样做时 这个,她拿起马蹄铁,让她不能再往回走 到同一个位置(因为它现在没有马蹄铁)。她从 拿起网格左上角的马蹄铁。贝西 只捡起一系列马蹄铁,形成完美平衡 绳子,因此她可能无法拿起所有 网格中的马蹄铁。
我在试图弄清楚如何创建一个递归找到最佳路径的算法时遇到了问题。谁能指出我正确的方向,或者有任何我可以看的例子来获得一个想法?我一直在搜索,但我发现的所有示例都是从一个点到另一个点,并且没有找到矩阵/数组中的所有可能路径。
package bessiehorseshoe;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BessieHorseShoe {
int answer = 0;
int matrixSize = 0;
public static void main(String[] args) throws IOException {
BessieHorseShoe goBessieGo = new BessieHorseShoe();
}
BessieHorseShoe() throws IOException {
int rowFilled = 0;
int currentColumn = 0;
int character = 0;
BufferedReader inputFile = new BufferedReader(new FileReader("hshoe.in"));
String inputLine = inputFile.readLine();
matrixSize = Character.digit(inputLine.charAt(0), 10);
System.out.println(matrixSize);
char[][] pMatrix = new char[matrixSize][matrixSize];
while ((character = inputFile.read()) != -1) {
char c = (char) character;
if (c == '(' || c == ')') {
pMatrix[rowFilled][currentColumn] = c;
System.out.print(pMatrix[rowFilled][currentColumn]);
rowFilled++;
if (rowFilled == matrixSize) {
currentColumn++;
rowFilled = 0;
System.out.println();
}
}
}
matchHorseShoes(pMatrix);
}
public int matchHorseShoes(char[][] pMatrix) {
if (pMatrix[0][0] == ')') {
System.out.println("Pattern starts with ')'. No possible path!");
return 0;
}
System.out.println("Works");
return 0;
}
}
【问题讨论】: