-
import java.io.BufferedInputStream;
-
import java.util.Scanner;
-
-
public class Main {
-
static String start;
-
static String end;
-
-
public static void dfs(char[] stack, char[] sequence, int posInStart, int posInEnd, int posInStack) {
-
if (posInStart + posInEnd == start.length() * 2) {
-
for (int i = 0; i < sequence.length; i++) {
-
System.out.print(sequence[i] + " ");
-
}
-
System.out.println();
-
}
-
if (posInStart < start.length()) {
-
sequence[posInStart + posInEnd] = ‘i‘;
-
stack[++posInStack] = start.charAt(posInStart);
-
dfs(stack, sequence, posInStart + 1, posInEnd, posInStack);
-
posInStack--;
-
}
-
if (posInStack >= 0 && posInEnd < end.length() && stack[posInStack] == end.charAt(posInEnd)) {
-
sequence[posInStart + posInEnd] = ‘o‘;
-
posInStack--;
-
dfs(stack, sequence, posInStart, posInEnd + 1, posInStack);
-
stack[++posInStack] = end.charAt(posInEnd);
-
}
-
}
-
-
public static void main(String[] args) {
-
Scanner sc = new Scanner(new BufferedInputStream(System.in));
-
while (sc.hasNext()) {
-
start = sc.next();
-
end = sc.next();
-
char[] stack = new char[start.length() * 2];
-
char[] sequence = new char[start.length() * 2];
-
System.out.println("[");
-
dfs(stack, sequence, 0, 0, -1);
-
System.out.println("]");
-
}
-
}
-
}
最近写的几道题都用到了dfs,用数组代替栈的使用,控制好stack数字下标就没什么大问题,难得一次AC
[JAVA][ZOJ 1004][Anagrams by Stack]
原文:http://blog.csdn.net/szhielelp/article/details/41511149