http://acm.hdu.edu.cn/showproblem.php?pid=1045
自己试了是对的,没错,可是就是WA
#include<stdio.h>
int main()
{
int huanjilu[10][10];
char map[10][10];
int juzhen,num;
while(scanf("%d",&juzhen))
{
int ju;
if(juzhen==0)break;
for(int i = 0;i<=9;i++)
{
for(int j = 0;j<=9;j++)
{
huanjilu[i][j] = -1;
}
}
for(int i= 0;i<=9;i++)//对地图赋于全墙值
{
for(int j=0;j<=9;j++)
{
map[i][j] = 'X';
}
}//over
getchar();//用于消耗回车
for(int i = 1;i<=juzhen;i++)//输入地图
{
for(int j = 1;;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='\n')
{
map[i][j]='X';
ju=j-1;
break;
}
}
}//over
int count=0;
for(int i = 1;i<=juzhen;i++)//对每个点的周围环境空数记录
{
for(int j = 1;j<=ju;j++)
{
if(map[i][j]!='X')
{
if(map[i-1][j]!='X')count++;
if(map[i+1][j]!='X')count++;
if(map[i][j-1]!='X')count++;
if(map[i][j+1]!='X')count++;
huanjilu[i][j] = count;
count = 0;
}
}
}//over
int x=0,y=0;
num=0;
for(int i = 1;i<=juzhen;i++)//对地图中的最小环境搜索
{
for(int j = 1;j<=ju;j++)//找到第一个不为x的位置
{
if(huanjilu[i][j]!=-1 && huanjilu[i][j]!=-2)
{
int min = huanjilu[i][j];
x=i,y=j;
for(int m=i;m<=juzhen;m++)
{
for(int n=1;n<=ju;n++)
{
if(map[m][n]=='.' && huanjilu[m][n]!=-2 && huanjilu[m][n]!=-1)
{
if(min>huanjilu[m][n])
{
min = huanjilu[m][n];
x = m;
y = n;
}
}
}
}
huanjilu[x][y] = -2;
map[x][y]='l';
int x1,y1;
bool up,down,right,left;
up=down=right=left=false;
for(x1=x-1;x1>=0;x1--)//
{
if(map[x1][y]=='l')
{
map[x][y]='.';
break;
}
if(map[x1][y]=='X')
{
up=true;
break;
}
}//up
for(x1=x+1;x1<=juzhen+1;x1++)
{
if(map[x1][y]=='l')
{
map[x][y]='.';
break;
}
if(map[x1][y]=='X')
{
down=true;
break;
}
}//down
for(y1=y-1;y1>=0;y1--)
{
if(map[x][y1]=='l')
{
map[x][y]='.';
break;
}
if(map[x][y1]=='X')
{
left=true;
break;
}
}
for(y1=y+1;y1<=ju+1;y1++)
{
if(map[x][y1]=='l')
{
map[x][y]='.';
break;
}
if(map[x][y1]=='X')
{
right=true;
break;
}
}
j--;
if(left==true && right==true && up==true && down==true)
{
num++;
}
}
}
}
printf("%d\n",num);
}
return 0;
}