奇怪的知识增加了...
查看原帖
奇怪的知识增加了...
71990
Surferer楼主2021/2/23 15:04

第一次见识到下面两段代码居然会有不同

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这种输入输出所消耗的内存更多吗

2021/2/23 15:04
加载中...