四皇后问题
//============================================================================
// Name : test.cpp
// Author : will
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include<stdio.h>
#include<stdlib.h>
#define n 4
int arr[n][n];
int isLegal(){
int i,j,
sum1 =0, //列和
sum2 =0, //行和
sum3 =0, //斜行和
sum4 =0; //反斜行和
for(i=0;i<n;i++){
for(j=0;j<n;j++){
sum1 += arr[j][i];
sum2 += arr[i][j];
if(i==j) sum3 += arr[i][j];
if(i+j==n-1) sum4 += arr[i][j];
}
if(sum1>1||sum2>1)
return 0;
sum1=0;
sum2=0;
}
if(sum3>1||sum4>1)
return 0;
return 1;
}
void print(){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
printf("----------\n");
}
void Trial(int i){
int j;
if(i>=n)
print();
else{
for(j=0;j<n;j++){
arr[i][j] = 1;
if(isLegal())
Trial(i+1);
arr[i][j] = 0;
}
}
}
int main(void)
{
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
arr[i][j] = 0;
}
}
Trial(0);
return EXIT_SUCCESS;
}