8皇后到N皇后問題
阿新 • • 發佈:2020-09-14
import java.util.Scanner;
public class EightQueens {
private int methods; private int chessAmounts; private int tags [][]; public EightQueens(int chessAmounts){ this.chessAmounts=chessAmounts; methods=0; tags=new int[chessAmounts+1][chessAmounts+1]; } //打標記 private void putTags(int x,int y,int status){ for(int i=1;i<=chessAmounts;i++){ tags[x][i]+=status; tags[i][y]+=status; } int m=x+y,n=x-y,t=x; while(t<=chessAmounts){ if(m-t>=1&&m-t<=chessAmounts) tags[t][m-t]+=status; if(t-n>=1&&t-n<=chessAmounts) tags[t][t-n]+=status; t++; } } //DFS public void putChess(int step){ if(step>chessAmounts) { methods++; return ; } for(int i=1;i<=chessAmounts;i++){ if(tags[step][i]==0){ putTags(step,i,1); putChess(step+1); putTags(step,i,-1); } } } public static void main(String[] args) { //輸入棋子數 Scanner in =new Scanner(System.in); int chessAmounts=in.nextInt(); //初始化 EightQueens eightQueens = new EightQueens(chessAmounts); //深度優先搜尋 eightQueens.putChess(1); //輸出 System.out.println(eightQueens.methods); }
}