Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

EightQueenProblem/이선우: Difference between revisions

From ZeroWiki
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 [] board;
  private int [] board;
 
 
 
 
Line 16: Line 16:
  {
  {
  this.sizeOfBoard = sizeOfBoard;
  this.sizeOfBoard = sizeOfBoard;
  board = new int[sizeOfBoard];
  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[i] = -1;
  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[line] = i;
  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[i], i )) return false;
  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[i] == x || board[i] == rightDownWay || board[i] == leftDownWay ) return false;
  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[i] == j ) System.out.print( QUEEN_MARK );
  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 [] args )
  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[0] ));
  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" );
		}
	}
}