0分求助,不知道哪里错了
查看原帖
0分求助,不知道哪里错了
1114140
yuniko_n楼主2024/2/26 11:02
import java.util.Scanner;
public class Main{
	static int n,flag;
	static int[] a=new int[14];
	static int[][] b=new int[14][14];
	private static void dfs(int i) {
		if(i>n) {
			if(flag<3) {
				int x=1;
				for(x=1;x<=n;x++) {
					System.out.print(a[x]+" ");
				}
				System.out.println();
			}
			flag++;
			return;
		}
		else {
			for(int j=1;j<=n;j++) {
				if(b[i][j]==0) {
					a[i]=j;
					biaoji(i,j);
					dfs(i+1);
					a[i]=0;
					reset(i,j);
					}
			}
		}
		
	}
	private static void biaoji(int x,int y) {//标记
		int p=x+1 ,q=y+1,k=y-1;
		while(p<=n&&q<=n) {
			b[p][q]=1;
			p++;q++;
		}
		p=x+1;
		while(p<=n) {
			b[p][y]=1;
			p++;
		}
		p=x+1;
		while(p<=n&&k>0) {
			b[p][k]=1;
			p++;k--;
		}
	}
	private static void reset(int x,int y) {//清除标记
		int p=x+1,q=y+1,k=y-1;
		while(p<=n&&q<=n) {
			b[p][q]=0;
			p++;q++;
		}
		p=x+1;
		while(p<=n) {
			b[p][y]=0;
			p++;
		}
		p=x+1;
		while(p<=n&&k>0) {
			b[p][k]=0;
			p++;k--;
		}
	}
	
	public static void main(String[] args) {
		Scanner cin=new Scanner(System.in);
		n=cin.nextInt();
		dfs(1);
		System.out.println(flag);
	}
}
2024/2/26 11:02
加载中...