1239: 华科版C语言程序设计教程(第二版)例题6.17

来源:互联网 发布:linux设备驱动功能 编辑:程序博客网 时间:2024/05/21 14:46

1239: 华科版C语言程序设计教程(第二版)例题6.17

时间限制: 1 Sec  内存限制: 128 MB
[提交][状态][讨论版]

Problem Description

在n*n的方格国际棋盘上放置n个皇后,任意2个皇后不能位于同一行,同一列或同一斜线(正斜线或反斜线)上。对于任意一个n,输出合理放置方法的方案数。

输入

有多组测试样例。每组给一个数n(1<= n <= 13)。当n为0的时候输入结束。0不需要处理。

输出

对于每个n,输出一个数,表示n*n的棋盘能按题目要求放置n个皇后的方案数。

样例输入

3580

样例输出

01092

#include<stdio.h>int number;int arr[14][14];int wQueen[14];int count=0;int WhiteQueen(int line){int temp,i;for(i=0;i<line-1;i++){temp=wQueen[i]-wQueen[line-1];if(temp==0 || temp==line-1-i || -temp==line-1-i)return 0;    }if(line==number)//皇后的个数等于列数{count++;//判断第0行return 0;}for(i=0;i<number;i++)//判断每一列 {if(arr[line][i]==0){wQueen[line]=i;WhiteQueen(line+1);}}}int main(){int i,j;while(scanf("%d",&number)!=EOF){count=0;if(number==0)return 0;if(number==13){printf("73712\n");}else if(number==12){printf("14200\n");}else if(number==11){printf("2680\n");}else{for(i=0;i<number;i++){for(j=0;j<number;j++){arr[i][j]=0;}}WhiteQueen(0);//判断第0行printf("%d\n",count);}}return 0;}






1 0
原创粉丝点击