2012蓝桥杯决赛试题最后一题答案

#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int map[7][7];

int num[7][7];

char H[6];

int ff=0;

int n=1;

void dfs(int x,int y)

{

    int i,j;

    if(x==6)

    {

        ff=1;

        cout<<n++<<endl;

        for(i=0;i<=5;i++)

        {    for(j=0;j<=5;j++)

            {

                printf("%c",H[map[i][j]]);

            }

        printf("\n");

        }

    return ;

    }

    int div=num[x][y];

    int f=0;

    if(map[x][y]==-1)

    for(i=0;i<=5;i++)

    {

        f=0;

        for(j=0;j<6;j++)

            if(map[j][y]==i)

            {f=1;break;}

        for(j=0;j<6;j++)

            if(map[x][j]==i)

            {f=1;break;}

        for(j=0;j<=5;j++)

            for(int k=0;k<=5;k++)

                if(num[j][k]==div&&map[j][k]==i)

                {f=1;break;}

        if(f)

            continue;

        map[x][y]=i;

        if(y<=4)

            dfs(x,y+1);

        else

            dfs(x+1,0);

        map[x][y]=-1;

    }

    else

    {

        if(y<=4)

            dfs(x,y+1);

        else

            dfs(x+1,0);

    }

    return ;

}

int pre[10010],now[10010];

void init()

{

    memset(map,-1,sizeof(map));

    memset(num,-1,sizeof(num));

    H[0]='A';

    H[1]='B';

    H[2]='C';

    H[3]='D';

    H[4]='E';

    H[5]='F';

    ff=0;

}

int main()

{

    int i,j;

    int T;

    char str[7];

    init();

    for(i=0;i<=5;i++)

    {

        scanf("%s",&str);

        for(j=0;j<=5;j++)

            num[i][j]=str[j]-'0';

    }

    //cout<<"ok"<<endl;

    scanf("%d",&T);

    while(T--)

    {

        scanf("%s",&str);

        map[str[0]-'0'][str[1]-'0']=str[2]-'A';

    }

    //cout<<"ok"<<endl;

    dfs(0,0);

    if(!ff)

        printf("无解\n");

    return 0;

}

 

你可能感兴趣的:(2012)