More actions
imported>Unknown No edit summary |
(Repair batch-0002 pages from live compare) |
||
| Line 9: | Line 9: | ||
private int numberOfBoard; | private int numberOfBoard; | ||
private int sizeOfBoard; | private int sizeOfBoard; | ||
private int | private int [] board; | ||
| Line 16: | Line 16: | ||
{ | { | ||
this.sizeOfBoard = sizeOfBoard; | this.sizeOfBoard = sizeOfBoard; | ||
board = new int | board = new int[sizeOfBoard]; | ||
numberOfBoard = 0; | numberOfBoard = 0; | ||
} | } | ||
| Line 27: | Line 27: | ||
protected void initBoard( int from ) | protected void initBoard( int from ) | ||
{ | { | ||
for(int i=from; i<sizeOfBoard; i++ ) board | for(int i=from; i<sizeOfBoard; i++ ) board[i] = -1; | ||
} | } | ||
| Line 52: | Line 52: | ||
for( int i=0; i<sizeOfBoard; i++ ) { | for( int i=0; i<sizeOfBoard; i++ ) { | ||
board | board[line] = i; | ||
setLinePosition( line + 1 ); | setLinePosition( line + 1 ); | ||
} | } | ||
| Line 61: | Line 61: | ||
{ | { | ||
for( int i=0; i<sizeOfBoard; i++ ) { | for( int i=0; i<sizeOfBoard; i++ ) { | ||
if( ! checkRule( board | if( ! checkRule( board[i], i )) return false; | ||
} | } | ||
| Line 75: | Line 75: | ||
for( int i=0; i<sizeOfBoard; i++ ) { | for( int i=0; i<sizeOfBoard; i++ ) { | ||
if( y != i ) { | if( y != i ) { | ||
if( board | if( board[i] == x || board[i] == rightDownWay || board[i] == leftDownWay ) return false; | ||
} | } | ||
rightDownWay ++; | rightDownWay ++; | ||
| Line 89: | Line 89: | ||
for( int i=0; i<sizeOfBoard; i++ ) { | for( int i=0; i<sizeOfBoard; i++ ) { | ||
for( int j=0; j<sizeOfBoard; j++ ) { | for( int j=0; j<sizeOfBoard; j++ ) { | ||
if( board | if( board[i] == j ) System.out.print( QUEEN_MARK ); | ||
else System.out.print( BLANK_BOARD ); | else System.out.print( BLANK_BOARD ); | ||
} | } | ||
| Line 103: | Line 103: | ||
public static void main( String | public static void main( String [] args ) | ||
{ | { | ||
try { | try { | ||
if( args.length != 1 ) throw new Exception(); | if( args.length != 1 ) throw new Exception(); | ||
NQueen nq = new NQueen( Integer.parseInt( args | NQueen nq = new NQueen( Integer.parseInt( args[0] )); | ||
nq.findPosition(); | nq.findPosition(); | ||
nq.printNumberOfBoard(); | nq.printNumberOfBoard(); | ||
| Line 117: | Line 117: | ||
} | } | ||
} | } | ||
Latest revision as of 00:16, 27 March 2026
NQueen.java
public class NQueen
{
public static final char BLANK_BOARD = '.';
public static final char QUEEN_MARK = 'Q';
private int numberOfBoard;
private int sizeOfBoard;
private int [] board;
private NQueen() {}
public NQueen( int sizeOfBoard )
{
this.sizeOfBoard = sizeOfBoard;
board = new int[sizeOfBoard];
numberOfBoard = 0;
}
protected void initBoard()
{
initBoard( 0 );
}
protected void initBoard( int from )
{
for(int i=from; i<sizeOfBoard; i++ ) board[i] = -1;
}
public void findPosition()
{
initBoard();
setLinePosition( 0 );
}
private void setLinePosition( int line )
{
if( line == sizeOfBoard ) {
if( checkRuleSet() ) {
numberOfBoard ++;
//printBoard();
//System.exit( 0 );
}
initBoard( line-1 );
return;
}
for( int i=0; i<sizeOfBoard; i++ ) {
board[line] = i;
setLinePosition( line + 1 );
}
}
private boolean checkRuleSet()
{
for( int i=0; i<sizeOfBoard; i++ ) {
if( ! checkRule( board[i], i )) return false;
}
return true;
}
private boolean checkRule( int x, int y )
{
int rightDownWay = x - y;
int leftDownWay = x + y;
for( int i=0; i<sizeOfBoard; i++ ) {
if( y != i ) {
if( board[i] == x || board[i] == rightDownWay || board[i] == leftDownWay ) return false;
}
rightDownWay ++;
leftDownWay --;
}
return true;
}
private void printBoard()
{
for( int i=0; i<sizeOfBoard; i++ ) {
for( int j=0; j<sizeOfBoard; j++ ) {
if( board[i] == j ) System.out.print( QUEEN_MARK );
else System.out.print( BLANK_BOARD );
}
System.out.println();
}
}
public void printNumberOfBoard()
{
System.out.println( "Number of different board: " + numberOfBoard );
}
public static void main( String [] args )
{
try {
if( args.length != 1 ) throw new Exception();
NQueen nq = new NQueen( Integer.parseInt( args[0] ));
nq.findPosition();
nq.printNumberOfBoard();
}
catch( Exception e ) {
System.out.println( "Usage: java NQueen size_of_queen" );
}
}
}