八皇后(打印棋盘,常规思路)

#include
#include//引用头文件
using namespace std;
int   cnt =0;
int   map[9][9];
int   op = -1;
bool  judge( int x ,int y  ){
	  int i=x-1,j=y-1;
	  while( i>=1 && j>=1 ){
	  	     if( map[i][j]   )
	  	         return false;
	  	       i--;
			   j--;    
	  }
 	  i=x-1;
	  j=y+1;
	  while( i>=1 && j<=8 ){
	  	     if( map[i][j] )
	  	         return false;
	  	       i--;
			   j++;    
	  }
	  
	  i=x+1;
	  j=y+1;
	  while( i<=8 && j<=8 ){
	  	     if( map[i][j] )
	  	         return false;
	  	         i++;
			     j++;    
	  }
	  i=x+1;
	  j=y-1;
	  while( i<=8 && j>=1 ){
	  	     if( map[i][j] )
	  	         return false;
	  	       i++;
			   j--;    
	  }
	  
	  
	  for( int i=1;i<=8;i++)
	        if( map[x][i])
			    return false;
	  for( int i=1;i<=8;i++)
	        if( map[i][y])
			    return false;
				 
	  return true;
}
void  dfs( int r   ){
	  if( r == 9){
	  	   printf("No.%d:\n",++cnt); 
	  	   for( int i=1;i<=8;i++){
	  	  	   for( int j=1;j<=8;j++){
	  	  	   	    printf("%d ",map[i][j]);
				   }
				printf("\n"); 
			}
	  	 
		 return ;
	  }
	  for( int i=1;i<=8;i++){
	  	   if(  !map[r][i] && judge( r,i ) ){
	  	   	     map[r][i] =1;
	  	   	     dfs( r+1 );
	  	   	     map[r][i] =0;
		   }  
	  }
}
void color(int a){
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);	
}
int main(void){
	color( 3 );
	dfs(1); 
	return 0;
}

 

你可能感兴趣的:(随便写写)