您的位置:首页 > 其它

POJ 1753 ID+DFS

2010-02-13 20:49 260 查看
#include <stdio.h>
#include <stdlib.h>
/* ID+ DFS */
char a[5][5];
int flag;
int check()
{
int i,j;
char c=a[0][0];
for (i=0;i<4;i++)
for (j=0;j<4;j++)
if (a[i][j]!=c)
return 0;
return 1;
}
void DFS(int depth,int start,int step)
{
int row,column,i;
if (depth>step)
{
if (check())
flag=1;
return;
}
else
{
for (i=start;i+(step-depth)<=16;i++)
{
row=i/4;
column=i%4;
if (row>0)
a[row-1][column]=(a[row-1][column]=='b')?'w':'b';
if (row<3)
a[row+1][column]=(a[row+1][column]=='b')?'w':'b';
if (column>0)
a[row][column-1]=(a[row][column-1]=='b')?'w':'b';
if (column<3)
a[row][column+1]=(a[row][column+1]=='b')?'w':'b';
a[row][column]=(a[row][column]=='b')?'w':'b';

DFS(depth+1,i+1,step);

if (flag==1)
return;
/* UNDO */
if (row>0)
a[row-1][column]=(a[row-1][column]=='b')?'w':'b';
if (row<3)
a[row+1][column]=(a[row+1][column]=='b')?'w':'b';
if (column>0)
a[row][column-1]=(a[row][column-1]=='b')?'w':'b';
if (column<3)
a[row][column+1]=(a[row][column+1]=='b')?'w':'b';
a[row][column]=(a[row][column]=='b')?'w':'b';
}
}
}

int main()
{
int i,step;
freopen("input.in","r",stdin);
for (i=0;i<4;i++)
gets(a[i]);
if (check())
{
printf("0/n");
return 0;
}
for (step=1;step<=16;step++)
{
flag=0;
DFS(1,0,step);
if (flag==1)
{
printf("%d/n",step);
break;
}
}
if (flag==0)
printf("Impossible/n");
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  include c