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("
");
        }
    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("无解
");
    return 0;
}
原文地址:https://www.cnblogs.com/wangfang20/p/3165582.html