第一次见识到下面两段代码居然会有不同
for (int i = 1; i <= n; i++) {
if (flag[i]) {
continue;
}
flag[i] = true;
ans[ans_index] = i;
dfs(ans_index+1);
flag[i] = false;
}
会MLE第三个点
for (int i = 1; i <= n; i++) {
if (!flag[i]) {
flag[i] = true;
ans[ans_index] = i;
dfs(ans_index+1);
flag[i] = false;
}
}
第三个点能压线过
用的是深搜,下面是AC代码
import java.util.Scanner;
public class Main {
static int n;
static boolean[] flag = new boolean[10];
static int[] ans = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
sc.close();
ans = new int[n];
dfs(0);
}
public static void dfs(int ans_index) {
if (ans_index == n) {
for (int i = 0; i < ans_index; i++) {
System.out.printf("%5d",ans[i]);
}
System.out.println();
return;
}
for (int i = 1; i <= n; i++) {
if (!flag[i]) {
flag[i] = true;
ans[ans_index] = i;
dfs(ans_index+1);
flag[i] = false;
}
}
}
}
原因真的是因为多了句continue吗
顺便问一下用StreamTokenizer和PrintWriter快读快写会比Scanner、System.out.print这种输入输出所消耗的内存更多吗