flip

  1 #include <iostream>
  2 using namespace std;
  3 int num=0;
  4 int minnum=100;
  5 void flip(int step);
  6 void fanzhuan(int x,int y);
  7 char map[4][4];
  8 bool same();
  9 bool safe(int x,int y);
 10 int Dx[4]={0,0,1,-1};
 11 int Dy[4]={1,-1,0,0};
 12 int data[4];
 13 int n[16]={0};
 14 int main()
 15 {
 16     for(int i=0;i<4;i++)
 17     {
 18         for(int j=0;j<4;j++)
 19         {
 20             cin >>map[i][j];
 21         }
 22     }
 23     
 24     flip(0);
 25     if(minnum<1000000)
 26     {
 27         cout <<minnum<<endl;
 28     }
 29     else 
 30     {
 31         cout <<"Impossible"<<endl;
 32     }
 33         return 0;
 34 }
 35 
 36 
 37 
 38 void flip(int row,int col,int deep)
 39 {
 40 
 41     if(deep==step)   
 42     {  
 43         flag=isOver();  
 44         return;  
 45     }  
 46     if(flag || row==5)  
 47     {  
 48         return;  
 49     }  
 50     flip(row,col);  
 51     if(col<4)  
 52     {  
 53         dfs(row,col+1,deep+1);  
 54     }  
 55     else  
 56     {  
 57         dfs(row+1,1,deep+1);  
 58     }  
 59     flip(row,col);  
 60     if(col<4)  
 61     {  
 62         dfs(row,col+1,deep);  
 63     }  
 64     else  
 65     {  
 66         dfs(row+1,1,deep);  
 67     }  
 68     return;  
 69 }  
 70 
 71 
 72 
 73 
 74 
 75 
 76 
 77 void fanzhuan(int x,int y)
 78 {
 79     int mx;
 80     int my;
 81     if(safe(x,y))
 82     {
 83         if(map[x][y]=='b')
 84             map[x][y]='w';
 85         else map[x][y]='b';
 86     }
 87     for(int i=0;i<4;i++)
 88     {
 89         mx=x+Dx[i];
 90         my=y+Dy[i];
 91         if(safe(mx,my))
 92         {
 93             if(map[mx][my]=='b')
 94                 map[mx][my]='w';
 95             else map[mx][my]='b';
 96         }
 97     }
 98 }
 99 bool safe(int x,int y)
100 {
101     bool ret=true;
102     if(x>=4||x<0||y>=4||y<0)
103         ret=false;
104     return ret;
105 }
106 bool same()
107 {
108     bool ret=true;
109     for(int i=0;i<4;i++)
110     {
111         for(int j=0;j<4;j++)
112         {
113             if(map[i][j]!='b')
114                 ret=false;
115         }
116     }
117     if(ret==false)
118     {
119         ret=true;
120         for(int i=0;i<4;i++)
121         {
122             for(int j=0;j<4;j++)
123             {
124                 if(map[i][j]!='w')
125                     ret=false;
126             }
127         }
128     }
129     return ret;
130 }

 

转载于:https://www.cnblogs.com/jintg/p/6347115.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值