CODEVS 1295N皇后问题

来源:互联网 发布:衣服好看又好的淘宝店 编辑:程序博客网 时间:2024/05/21 14:40
#include<stdio.h>#include<string.h>int n,i,j,k,a[5][30],tot=0;void dfs(int cur){//搜索到了第几行     if(cur==n+1) tot++;//超出边界表示一轮搜索完成     else  for(int i=1;i<=n;i++){        if(a[0][i]==0&&a[1][i+cur]==0&&a[2][i-cur+n]==0){//a[0][i]==0 对同列判重,a[1][i+cur]==0 对副对角线判重,a[2][i-cur+n]==0对主对角线判重            a[0][i]=1;a[1][i+cur]=1;a[2][i-cur+n]=1;            dfs(cur+1);            a[0][i]=0;a[1][i+cur]=0;a[2][i-cur+n]=0;        }    }} int main(){    freopen("1295.in","r",stdin);    freopen("1295.out","w",stdout);    scanf("%d",&n);    memset(a,0,sizeof(a));    dfs(1);    printf("%d",tot);    return 0;   }

第七天
盲点:列a[0][],主斜行a[1][],副斜行a[2][],判断合法。
注意dfs递归后将访问标记a[1],a[2],a[3]清零

0 0