| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求助:用递归写的,用例已经通过,为什么老是报WA呀?请教牛人,万分感激!#include <iostream.h>
int image[30][30];
int record[30][30];
int per;
void perimeters(int x,int y,int x1,int y1);
int main()
{
int i,j;
int g,h;
char a;
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
while(x1 != 0 && y1 != 0 && x2 != 0 && y2 != 0)
{
per = 0;
for(g = 0;g < 30;g ++)
for(h = 0;h < 30;h ++)
record[g][h] = 0;
for(i = 1;i <= x1;i ++)
for(j = 1;j <= y1;j ++)
{
cin>>a;
if(a == 'X')
image[i][j] = 1;
else
if(a == '.')
image[i][j] = 0;
}
perimeters(x2,y2,x1,y1);
cout<<per<<endl;
cin>>x1>>y1>>x2>>y2;
}
return 0;
}
void perimeters(int x,int y,int x1,int y1)
{
if(image[x][y] == 1 && record[x][y] == 0)
{
record[x][y] = 1;
if(x + 1 <= x1)
{
if(image[x + 1][y] == 0)
per ++;
else
perimeters(x + 1,y,x1,y1);
}
else
per ++;
if(x - 1 >= 1)
if(image[x -1][y] == 0)
per ++;
else
perimeters(x - 1,y,x1,y1);
else
per ++;
if(y + 1 <= y1)
if(image[x][y + 1] == 0)
per ++;
else
perimeters(x,y + 1,x1,y1);
else
per ++;
if(y - 1 >= 1)
if(image[x][y - 1] == 0)
per ++;
else
perimeters(x,y-1,x1,y1);
else
per ++;
if(x - 1 >= 1 && y - 1 >= 1)
perimeters(x - 1,y - 1,x1,y1);
if(x - 1 >= 1 && y + 1 <= y1)
perimeters(x - 1,y + 1,x1,y1);
if(x + 1 <= x1 && y - 1 >= 1)
perimeters(x + 1,y - 1,x1,y1);
if(x + 1 <= x1 && y + 1 >= 1)
perimeters(x + 1,y + 1,x1,y1);
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator