| 
 | 
 
 
发表于 2017-12-23 19:13:43
|
显示全部楼层
 
 
 
#include<stdio.h> 
#include<math.h> 
#define N 8 
//n皇后、回溯法 
int x[8+1]; 
int count = 0; 
int judge(int k,int i) 
{ 
        for(int j = 1; j < k; j++) 
        { 
                if(x[j] == i || abs(i - x[j]) == abs(k - j))  
                { 
                        //printf("%d不能再%d列",k,i);  
                        return 0; 
                } 
                 
        } 
        return 1; 
} 
 
int main(){ 
        for(int i = 0; i <= N; i++) x[i] = 0; 
        int k = 1; 
        while(k > 0) 
        { 
                x[k]++; 
                //寻找位置  
                while(x[k] <= N && !judge(k,x[k])) x[k]++; 
                 
                //分析情况 
                if(k == N && x[k] <= N) 
                {//完成查找、输出  
                        for(int j = 1; j <= N; j++) printf("%d ",x[j]); 
                        printf("\n"); 
                        count++;  
                } 
                else if(k < N && x[k] <= N) 
                {//当前皇后找到位置  
                        k++; 
                } 
                else 
                {//找不到位置  
                        x[k] = 0; k--; 
                } 
                  
        } 
        printf("%d",count); 
         
        return 0; 
}  
 
 |   
 
 
 
 |