比赛 20140713下午练习 评测结果 RRRTTTTRTT
题目名称 跳棋的挑战 最终得分 0
用户昵称 St.Burning\ 运行时间 6.394 s
代码语言 C++ 内存使用 0.31 MiB
提交时间 2014-07-13 16:57:43
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>

#define MAXN 17
#define x 14
#define cycle(i,a,b) for(int i=a;i<=b;i++)
using namespace std;

int N,Ans=0;
int Map[MAXN],zs_yx[MAXN],ys_zx[MAXN];
int seat[MAXN];

void Dfs(int,int [],int [],int [],int []);

int main()
{
        freopen("checker.in","r",stdin);
        freopen("checher.out","w",stdout);
        memset(Map,0,sizeof(Map));
        memset(seat,0,sizeof(seat));
        memset(zs_yx,0,sizeof(zs_yx));
        memset(ys_zx,0,sizeof(ys_zx));
        cin>>N;

        Dfs(1,seat,Map,zs_yx,ys_zx);
        
        cout<<Ans;
        return 0;
}

void Dfs(int num, int seat[], int Map[], int zs_yx[], int ys_zx[])
{
        if(num==N)
        {
                Ans++;
                if(Ans<=3)
                {
                        cycle(i,1,N) cout<<seat[i]<<" ";
                        cout<<endl;
                }
                return;
        }
        cycle(i,1,N)
        {
                if(Map[i]==0&&zs_yx[i-N+x]==0&&ys_zx[i+N]==0)
                {
                        Map[i]==1;
                        zs_yx[i-N+x]==1;
                        ys_zx[i+N]==1;
                        seat[num]=i;
                        Dfs(num+1,seat,Map,zs_yx,ys_zx);
                }
        }
        return;
}