zoukankan      html  css  js  c++  java
  • UVA 211 The Domino Effect

    https://vjudge.net/problem/UVA-211

    题意:

    7*8 网格  放“双六” 多米诺骨牌,有多少种放法

    如果每次找第一个没有骨牌的放,TLE

    dfs参数里加上这一次要在哪儿放

    #include<cstdio>
    #include<algorithm>
    
    using namespace std;
    
    int id[7][7],cnt,tot;
    
    int point[7][8],ans[7][8];
    
    bool vis[29];
    
    int get(int i,int j,int I,int J)
    {
        return id[min(point[i][j],point[I][J])][max(point[i][j],point[I][J])];
    }
    
    bool check(int x)
    {
        for(int i=0;i<7;i++)
            if(!ans[x][i]) return false;
        return true;
    }
    
    void dfs(int x,int y)
    {    
        if(y==8)
        {
            x++;y=0;
            if(x==7)
            {
                tot++;
                for(int i=0;i<7;i++)
                {
                    for(int j=0;j<8;j++) printf("%4d",ans[i][j]);
                    printf("
    ");
                }
                printf("
    ");
                return;
            } 
        }
        if(ans[x][y]) dfs(x,y+1);
        else 
        {
            if(y!=7 && !ans[x][y+1])
            {
                int t=get(x,y,x,y+1);
                if(!vis[t])
                {
                    ans[x][y]=ans[x][y+1]=t; vis[t]=true;
                    dfs(x,y+1);
                    ans[x][y]=ans[x][y+1]=0; vis[t]=false; 
                }
            }
            if(x!=6 && !ans[x+1][y])
            {
                int t=get(x,y,x+1,y);
                if(!vis[t])
                {
                    ans[x][y]=ans[x+1][y]=t; vis[t]=true;
                    dfs(x,y+1);
                    ans[x][y]=ans[x+1][y]=0; vis[t]=false;
                }
            }
        }
    }
    
    int main()
    {
        //freopen("1.in","r",stdin);
        //freopen("1.out","w",stdout);
        for(int i=0;i<=6;i++)
            for(int j=i;j<=6;j++)
             id[i][j]=++cnt;
        int T=0;
        while(scanf("%d",&point[0][0])!=EOF)
        {
            if(T) printf("
    
    
    ");
            printf("Layout #%d:
    
    ",++T);
            for(int i=1;i<8;i++) scanf("%d",&point[0][i]);
            for(int i=1;i<7;i++)
                for(int j=0;j<8;j++)
                    scanf("%d",&point[i][j]);
            for(int i=0;i<7;i++)
            {
                for(int j=0;j<8;j++) printf("%4d",point[i][j]);
                printf("
    ");
            }
            printf("
    ");    
            printf("Maps resulting from layout #%d are:
    
    ",T);
            tot=0;
            dfs(0,0);
            printf("There are %d solution(s) for layout #%d.
    ",tot,T);
        }
    }
  • 相关阅读:
    BestCoder Round #87 1001
    p1304 家族
    hdu 1003
    hdu 1231
    hdu 1232 畅通工程
    hdu 4107
    Robot Framework--用例、数据、流程分离例子
    Robot Framework--RIDE面板与库的说明
    Robot Framework--pybot命令
    Robot Framework--运行pybot时出错
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7671350.html
Copyright © 2011-2022 走看看