//2588200 2011-07-20 20:11:14 Accepted 1002 C 0 160 ylwh!
#include <stdio.h>
int dxdy[5][3]={ {1,0}, {-1,0}, {0,1}, {0,-1} };
char map[5][5], flag[5][5];
int n;
int find()
{
int i, j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(flag[i][j]==0)
return 1;
return 0;
}
int search(int x, int y)
{
int i, j, dx, dy, num=0;
for(i=0; i<4; i++)
{
dx=x, dy=y;
for(j=0; j<n; j++)
{
dx+=dxdy[i][0];
dy+=dxdy[i][1];
if(dx>=0 && dx<n && dy>=0 && dy<n)
{
if(map[dx][dy]=='o')
return 11;
if(map[dx][dy]=='X')
break;
else if(map[dx][dy]=='.')
num++;
}
}
}
return num;
}
void change(int x, int y)
{
int i, j, dx, dy;
for(i=0; i<4; i++)
{
dx=x, dy=y;
for(j=0; j<n; j++)
{
dx+=dxdy[i][0];
dy+=dxdy[i][1];
if(dx>=0 && dx<n && dy>=0 && dy<n)
{
if(map[dx][dy]=='X')
break;
else
flag[dx][dy]=1;
}
else
break;
}
}
}
void search_min()
{
int min=10, i, j, x, y, temp;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(flag[i][j]==0 && map[i][j]=='.' && (temp=search(i, j))<=min)
{
x=i, y=j;
min=temp;
}
map[x][y]='o';
flag[x][y]=1;
change(x, y);
}
int main(void)
{
int i, j, max;
while(scanf("%d", &n) && n!=0)
{
max=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
scanf(" %c", &map[i][j]);
if(map[i][j]=='X')
flag[i][j]=1;
else if(map[i][j]=='.')
flag[i][j]=0;
else printf("error ~%c~\n", map[i][j]);
}
while(find())
{
search_min();
max++;
}
printf("%d\n", max);
}
return 0;
}
zoj 1002
最新推荐文章于 2019-03-07 11:21:00 发布