标签:
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 38720 | Accepted: 16818 |
Description
Consider the following position as an example: Input
Output
Sample Input
bwwb bbwb bwwb bwww
Sample Output
4
Source
#include <iostream>
#include <string>
#include <cstring>
#include <string>
#include <algorithm>
#include <cstdio>
using namespace std;
int ans;
char maze[5][5];
bool judge()
{
bool flag=1;
for(int i=0;i<4;++i)
{
for(int j=0;j<4;++j)
{
if(i==0&&j==0)
{
continue;
}
if(j!=0)
{
if(maze[i][j]!=maze[i][j-1])
{
flag=0;
break;
}
}
else if(j==0)
{
if(maze[i][j]!=maze[i-1][3])
{
flag=0;
break;
}
}
}
if(!flag)
break;
}
return flag;
}
void iswap(int x,int y)
{
if(maze[x][y]=='b')
{
maze[x][y]='w';
}
else if(maze[x][y]=='w')
{
maze[x][y]='b';
}
}
void change(int x,int y)
{
iswap(x,y);
if(x-1>=0)
{
iswap(x-1,y);
}
if(x+1<4)
{
iswap(x+1,y);
}
if(y-1>=0)
{
iswap(x,y-1);
}
if(y+1<4)
{
iswap(x,y+1);
}
}
void dfs(int x,int y,int step)
{
if(judge())
{
if(step<ans)
{
ans=step;
//cout<<x<<" "<<y<<" "<<step<<endl;
}
return ;
}
change(x,y);
int dx=x,dy=y+1;
if(dy>=4)
{
dx+=1;
dy=0;
}
if(dx>=4)
{
if(judge())
{
if(step+1<ans)
{
ans=step+1;
}
}
change(x,y);
return ;
}
dfs(dx,dy,step+1);
change(x,y);
dfs(dx,dy,step);
return ;
}
int main()
{
for(int i=0;i<4;++i)
{
scanf("%s",&maze[i]);
}
ans=20;
dfs(0,0,0);
/*for(int i=0;i<4;++i)
{
printf("%s\n",maze[i]);
}*/
if(ans<20)
{
printf("%d\n",ans);
}
else
{
printf("Impossible\n");
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/leeholmes/article/details/51361646