zoukankan      html  css  js  c++  java
  • ZOJ 1008

    这一题用了DFS对每一种方法进行尝试,直到有一种成功的就possible;

    #include <iostream>
    #include "string.h"
    using namespace std;
    int diff;
    int card[26][4];          //用于记录不同卡片的上、右、下、左、方向的数字
    int cardnum[26];          //记录每一种卡片的个数
    int trueorder[26];         //记录已经排好序的卡片是哪一种卡片,
    int n;               
    bool dfs(int now){
        if(n*n==now)return true;
        for(int i=0;i<diff;i++){
            if(0==cardnum[i])continue;
            if(0!=now/n&&card[trueorder[now-n]][2]!=card[i][0])continue;      //有上一行就与上一行相邻数字进行对比  
            if(0!=now%n&&card[trueorder[now-1]][1]!=card[i][3])continue;      //有前一个就与前一个相邻数字进行对比
            trueorder[now]=i;                             //前面的条件都成立,就放入已经排好的顺序中
            cardnum[i]--;                                //此卡所在卡种数减一
            if(dfs(now+1))return true;                         //进行下一个排序
            else {
                cardnum[i]++;
            }
        }
        return false;
    }
    int main()
    {
        int game=1,up,rig,dow,lef,j,i;
        while(cin>>n){
            if(n==0)break;
            memset(cardnum,0,sizeof(cardnum));
            memset(card,0,sizeof(card));
            diff=0;
            for( i=0;i<n*n;i++){
                cin>>up>>rig>>dow>>lef;
                for(j=0;j<diff;j++){
                   if(card[j][0]==up&&card[j][1]==rig&&card[j][2]==dow&&card[j][3]==lef)break;      //判断是否已经有此卡种   
                }
                if(j==diff){                                //无此卡种则添加此卡种  
                    cardnum[j]++;
                    diff++;
                    card[j][0]=up;
                    card[j][1]=rig;
                    card[j][2]=dow;
                    card[j][3]=lef;
                }
                else cardnum[j]++;
            }  
            if(1!=game)cout<<endl;                        //注意换行   此处被坑了一次
            cout<<"Game "<<game<<": ";                        
            game++;
            if(dfs(0))
            cout<<"Possible ";
            else cout<<"Impossible ";
        }
        return 0;
    }

  • 相关阅读:
    强人教你吃自助火锅(转载)
    求职贴士:面试之十大不可说
    通过LoadRunner监控Linux的资源状况
    最美好的中秋祝福献给您
    一台电脑中招,整网均被感染9166.biz / 5y5.us Arp木马病毒专杀360独家发布
    白领把握交际的最佳时间〔转载〕
    40道题预测你能活多久
    老色狼给小色狼的32句忠告[转载]
    WINRAR 命令行语法[转载]
    <<软件性能测试与LoadRunner实战>>可以在网上和书店买到了
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3848179.html
Copyright © 2011-2022 走看看