日程表

来源:互联网 发布:muji.it 编辑:程序博客网 时间:2024/04/29 00:56
答案0 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 代码#include<iostream>using namespace std;int cnt=0;int b[100005];int cs=0;void dfs(int a[7][7],int b[5][7],int cur){//    for(int i=0;i<7;i++)//    {//        for(int j=0;j<7;j++)//        {//            cout<<a[i][j]<<" ";//        }//        cout<<endl;//    }//    cout<<endl;    if(cur==5)    {        int cs=0;        for(int j=0;j<7;j++)        {            int cc=0;            for(int i=0;i<5;i++)            {                if(b[i][j]==1) cc++;            }            if(cc==5) cs++;        }        int okq=1;        if(cs<3) okq=0;        int ok=1;        for(int j=0;j<7;j++)        {            if(b[0][j]+b[1][j]+b[2][j]+b[3][j]<2) ok=0;        }        int oka=0;        if(b[1][6]==0&&b[3][6]==0&&b[4][6]==0) oka=1;        int okb=1;        if(b[0][2]+b[4][2]!=2) okb=0;        int p=0;        int okc=1;        for(int j=0;j<7;j++)        {            if(b[0][j]==1&&b[2][j]==1) p++;        }        if(p<4) okc=0;        if(okq&&ok&&oka&&okb&&okc)        {            for(int i=0;i<5;i++)            {                for(int j=0;j<7;j++)                    cout<<b[i][j]<<" ";                cout<<endl;            }            cout<<endl;        }//        for(int i=0;i<5;i++)//        {//            for(int j=0;j<7;j++)//                cout<<b[i][j]<<" ";//            cout<<endl;//        }//        cout<<endl;        return ;    }    for(int i=0;i<7;i++)    {        for(int j=0;j<7;j++)        {            b[cur][j]=a[i][j];        }        dfs(a,b,cur+1);    }//    for(int i=0;i<7;i++)//    {//        for(int j=0;j<7;j++)//        {//            cout<<b[i][j]<<" ";//        }//        cout<<endl;//    }}void f(int cur,int *a,int *b){    if(cur==7)    {        int ok=1;        for(int i=0;i<7;i++)        {            if(a[i]==1) cs++;        }        //cout<<cs<<endl;        for(int i=0;i<7;i++)        {            if(a[i%7]+a[(i+1)%7]+a[(i+2)%7]+a[(i+3)%7]==4) ok=0;        }        if(cs==5&&ok)        {            for(int i=0;i<7;i++)            {                b[cnt]=a[i];                cnt++;            }        }        cs=0;        return ;    }    for(int i=0;i<2;i++)    {        a[cur]=i;        f(cur+1,a,b);    }}int main(){    int a[7];    memset(a,0,sizeof(a));    f(0,a,b);     int x[7][7];    cnt=0;    for(int i=0;i<7;i++)    {        for(int j=0;j<7;j++)        {            x[i][j]=b[cnt++];        }    }    int b[5][7];    memset(b,0,sizeof(b));    dfs(x,b,0);    return 0;}

0 0