bzoj3109: [cqoi2013]新数独

来源:互联网 发布:string数组添加数据 编辑:程序博客网 时间:2024/06/05 15:45

就是耿直的搜索然后就rank最后一名了…

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){    char ch=getchar();int f=0;    while(ch<'0'||ch>'9') ch=getchar();    while(ch>='0'&&ch<='9') {f=f*10+(ch^48);ch=getchar();}    return f;}char s[17][17],now;int a[15][15],b[15][15],ans[15][15];bool ac=0;void dfs(int x,int y){    //cout<<x<<" "<<y<<endl;    for(int i=1;i<=9;i++)    {        if(ac) return;        ans[x][y]=i;        bool ok=1;        for(int j=1;j<=9;j++)        {            if((ans[x][j]==ans[x][y]&&j!=y)||(ans[j][y]==ans[x][y]&&x!=j))            {                ok=0;                break;            }        }        int lx=(x-1)/3*3+1,rx=lx+2,ly=(y-1)/3*3+1,ry=ly+2;        //cout<<ly<<" "<<ry<<endl;cout<<ok<<" ";        if(ok)        {            for(int j=lx;j<=x;j++)            {                for(int l=ly;l<=ry;l++)                {                    if(ans[x][y]==ans[j][l]&&(x!=j||y!=l))                    {                        ok=0;                        break;                    }                }                if(!ok) break;            }        }        if(ok)        {            if(x!=1)            {                if((b[x-1][y]==1&&ans[x-1][y]<ans[x][y])||(b[x-1][y]==0&&ans[x-1][y]>ans[x][y]))                ok=0;            }            if(y!=1)            {                if((a[x][y-1]==1&&ans[x][y-1]<ans[x][y])||(a[x][y-1]==0&&ans[x][y-1]>ans[x][y]))                ok=0;            }        }        if(ok)        {            if(x==9&&y==9)            {                ac=1;                return;            }            else if(y==9)            {                dfs(x+1,1);            }            else dfs(x,y+1);        }        if(!ac)        ans[x][y]=0;    }}int transx(char x){    return (x=='>');}int transy(char x){    return (x=='v');}int main(){    for(int i=1;i<=15;i++)    {        if(i==2||i==4||i==7||i==9||i==12||i==14)        {            for(int j=1;j<=9;j++)            cin>>s[i][j];        }        else        {            for(int j=1;j<=6;j++)            cin>>s[i][j];        }    }    for(int i=1;i<=15;i++)    {        if(s[i][1]=='>'||s[i][1]=='<')        {            now++;            a[now][1]=transx(s[i][1]);            a[now][2]=transx(s[i][2]);            a[now][3]=2;            a[now][4]=transx(s[i][3]);            a[now][5]=transx(s[i][4]);            a[now][6]=2;            a[now][7]=transx(s[i][5]);            a[now][8]=transx(s[i][6]);            a[now][9]=2;        }    }    now=0;    for(int i=1;i<=15;i++)    {        if(s[i][1]=='v'||s[i][1]=='^')        {            now++;            if(now%3==0)            {                for(int j=1;j<=9;j++) b[now][j]=2;now++;            }            for(int j=1;j<=9;j++) b[now][j]=transy(s[i][j]);        }    }    for(int i=1;i<=9;i++) b[9][i]=2;    /*for(int i=1;i<=9;i++)    {        for(int j=1;j<=9;j++)        printf("%d ",a[i][j]);        printf("\n");    }*/    dfs(1,1);    //cout<<ac;    for(int i=1;i<=9;i++)    {        for(int j=1;j<=8;j++)        {            printf("%d ",ans[i][j]);        }        printf("%d",ans[i][9]);        puts("");    }}
原创粉丝点击