HDU2553

来源:互联网 发布:windows 10 蓝屏重启 编辑:程序博客网 时间:2024/06/06 01:49
#include <iostream>#include <cstdio>using namespace std;int column[20];   //int rup[20];int lup[20];int ans[11];int num=0;int N;void backtrack(int i);   //定义一种方法  其实是回溯法 int main(){int i=0;for (int j=1; j<=10;j++){N=j;for (i=1; i<=j; i++)column[i] = 1;for (i=1; i<=2*j; i++)rup[i] = lup[i] = 1;   backtrack(1);//   调用回溯法  定义num为全局变量  这样ans数组就能储存该数据 ans[j] = num;     //打表  不然永远超时 num = 0;}while(scanf("%d",&N)==1&&N){cout<<ans[N]<<endl;}return 0;}void backtrack(int i){int j;if (i>N) num++;else{for (j=1; j<=N; j++){if (column[j]==1 && rup[i+j]==1 && lup[i-j+N]==1){column[j] = rup[i+j] = lup[i-j+N] = 0;   //有皇后为1 没有赋值为0    backtrack(i+1);//不断递归调用  column[j] = rup[i+j] = lup[i-j+N] = 1;  //恢复数组的数据 }}}}

0 0
原创粉丝点击