2013年11月8日 星期五

[USACO] 1-5-4 Checker Challenge


/*
ID: 551100k1
LANG: C++
TASK: checker
*/
#include<stdio.h>
int a[20]={0},b[50]={0},c[50]={0};
int s[20],n,add=0;
void dfs(int k){
    int i;
    if(k==n){
        if(add<3){
            printf("%d",s[0]+1);
            for(i=1;i<n;i++)
                printf(" %d",s[i]+1);
            puts("");
        }
        add++;
        return;
    }
    for(i=0;i<n;i++)
    if(a[i]==0 && b[i-k+14]==0 && c[i+k]==0){
        a[i]=1,b[i-k+14]=1,c[i+k]=1;
        s[k]=i;
        dfs(k+1);
        a[i]=0,b[i-k+14]=0,c[i+k]=0;
    }
}
int main(){
    freopen("checker.in","r",stdin);
    freopen("checker.out","w",stdout);
    scanf("%d",&n);
    dfs(0);
    printf("%d\n",add);
}

沒有留言:

張貼留言