zoukankan      html  css  js  c++  java
  • POJ1753

     1 //POJ1753 枚举2016-7-31:2016-8-2  
     2  
     3 #include<stdio.h>
     4 char copy[17][20];
     5 void oneflip(char*rec,int i){
     6     if(0<=i&&i<20&&i!=4&&i!=9&&i!=14&&i!=19){
     7         if(rec[i]=='w') rec[i]='b';
     8         else rec[i]='w';
     9     }
    10 }
    11 void allflip(char*rec,int i){//全翻 
    12     oneflip(rec,i);
    13     oneflip(rec,i+1);
    14     oneflip(rec,i-1);
    15     oneflip(rec,i+5);
    16     oneflip(rec,i-5); 
    17 }
    18 bool check(char* rec){
    19     char a=rec[0];
    20     for(int i=0;i<20;i++){
    21         if(a!=rec[i]&&rec[i]!='
    ')
    22             return false;
    23         }
    24     return true;
    25 }
    26 
    27 bool func(char rec[],int start,int count){//枚举算法。这段是核心代码,递归不熟练,这段改了很久,觉得写的还是不清晰。 
    28     if(check(rec)) 
    29     return true;
    30     if(start+count>=20||count==0)
    31     return false;
    32     //拷贝数组 
    33     for(int i=0;i<20;i++){
    34         copy[count][i]=rec[i];
    35     }
    36     
    37     for(int i=start;i<20;i++){
    38         if(i==4||i==9||i==14||i==19)
    39         continue;
    40          
    41         allflip(rec,i);
    42         
    43         /*printf("%d-------------------
    ",count);//打印路径 
    44         for(int t=0;t<20;t++)
    45         printf("%c",rec[t]);
    46         */
    47         if(count!=1&&i+1!=4&&i+1!=9&&i+1!=14&&i+1!=19){
    48         if(func(rec,i+1,count-1))
    49         return true;
    50         }
    51         else
    52         if(func(rec,i+2,count-1))
    53         return true;
    54         }
    55         //还原数组 
    56         for(int i=0;i<20;i++){
    57         rec[i]=copy[count][i];
    58            }
    59            
    60     return false;
    61 }
    62 
    63 int main(){
    64     int flag=0;
    65     char rec[20]; //rec 4 9 14 19 as 
     
    66     for(int i=0;i<20;i++) 
    67     scanf("%c",&rec[i]);
    68     int count=0;
    69     for(int i=0;i<=16&&!flag;i++){
    70     if(func(rec,0,i)){
    71     printf("%d
    ",i);
    72     flag=1;
    73     }
    74     }
    75     if(flag==0)
    76     printf("Impossible
    ");
    77     return 0;
    78 }
  • 相关阅读:
    css清除select默认的样式
    网站性能优化的方法--Yahoo
    jQuery写toTop(回到顶部)效果
    jquery的addClass、removeClass、toggleClass方法
    css选择器汇总
    日期对象的正确写法
    顶会热词统计
    《人月神话》读后感二
    新闻详情页实现
    第八周总结
  • 原文地址:https://www.cnblogs.com/lsj2020/p/5731463.html
Copyright © 2011-2022 走看看