zoukankan      html  css  js  c++  java
  • zoj 1008 暴力枚举求解dfs+优化

    /*
    现将相同的合并计数。
    再枚举判断是否符合当cou==n*n是符合就退出
    */
    #include<stdio.h>
    #include<string.h>
    #define  N  900
    int en[N][4],num[N],real[N][4],len,n,ok;
    void pp(int a[4],int b[4])//赋值
    {
        a[0]=b[0];
        a[1]=b[1];
        a[2]=b[2];
        a[3]=b[3];
    }
    void print(int a[4]) {
    printf("%d %d %d %d
    ",a[0],a[1],a[2],a[3]);
    }
    void dfs(int cou)
    {
       // printf("%d
    ",cou);
     //   if(cou)
        //   print(en[cou]);
        if(cou==n*n) {
         ok=1;
            return ;
        }
        if(ok)return ;
        int i;
        for(i=0;i<len; i++)
        {
            if(num[i]==0)continue;
            if((cou%n==0||en[cou][1]==real[i][3])&&(cou/n==0||en[cou+1-n][2]==real[i][0])) {//注意判断条件对于优化程序很好
                pp(en[cou+1],real[i]);
                num[i]-=1;
                dfs(cou+1);
                num[i]+=1;
            }
        }
        return ;
    }
    int main()
    {
        int i,k=0,w=0,a,b,c,j,d;
        while(scanf("%d",&n),n)
        {
            ok=0;
            memset(num,0,sizeof(num));
            len=0;
            for(i=1; i<=n*n; i++) {
                scanf("%d%d%d%d",&a,&b,&c,&d);
                for(j=0;j<len;j++)
                    if(a==real[j][0]&&b==real[j][1]&&c==real[j][2]&&d==real[j][3])
                    break;
                    if(j<len)
                        num[j]++;
                if(j==len) {
                real[len][0]=a;real[len][1]=b;
                real[len][2]=c;real[len][3]=d;
                num[len++]=1;
                }
            }//这里需要这样储存相同的,感觉有点坑啊 ,原来我的是先储存下来在合并合同的但是chaoshi,改成这样就不超时ile
       
        if(w)
            printf("
    ");
           dfs(0);
           if(ok)
                printf("Game %d: Possible
    ",++k);
            else
                printf("Game %d: Impossible
    ",++k);
        w=1;
        }
        return 0;
    }
    

  • 相关阅读:
    配置 Linux 服务器 SSH 安全访问的四个小技巧
    线性代数
    转载的其它人博客
    c#下dll引入错误的问题
    游戏中简单代码
    明年的任务
    c# 异步通信网络中存在的问题
    解决导入五万条数据缓慢问题
    c#中关于结构体和字节数组转化
    写给现在的自己
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410622.html
Copyright © 2011-2022 走看看