您的位置:首页 > 其它

hdoj 1312解题报告

2011-11-05 08:08 330 查看
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
#define MAX 25
char map[MAX][MAX];int visited[MAX][MAX];
int sum;int W,H;//W代表宽,H代表高
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};

class Point
{
public:
int col;
int row;
};

int  over(Point p)
{
if(p.col<0||p.row<0)	return 1;
if(p.col>=H||p.row>=W)  return 1;
else					return 0;
}

void travel(Point p)
{
visited[p.col][p.row]=1;
sum++;
int i;
for(i=0;i<4;i++)
{
Point cs;cs.col=p.col;cs.row=p.row;
cs.col+=dir[i][0];cs.row+=dir[i][1];

int flag=over(cs);
if(!flag&&!visited[cs.col][cs.row]&&map[cs.col][cs.row]=='.')
{
travel(cs);
}
}
}

int main()
{
while(scanf("%d %d",&W,&H)==2)
{
if(W==0&&H==0)
return 0;
int i,j;

//初始化部分
sum=0;Point p;
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
map[i][j]=0;
visited[i][j]=0;
}
}

//输入部分
getchar();char str[20];
for(i=0;i<H;i++)//在数组当中i代表行,j代表列
{
gets(str);
for(j=0;j<strlen(str);j++)
{
if(str[j]=='@')
{
map[i][j]='.';
p.col=i;p.row=j;
}
else
{
map[i][j]=str[j];
}
}
}

travel(p);
cout<<sum<<endl;
}
return 0;
}

/*

1 如果有时候不结束也是会出现wa的,比如说这一题就是一个例子
最后输出0 0的时候结束。在开始写代码的时候我没有意识到这一点。
所以一直wa。
2 不要用x,y来表示坐标,很容易跟现实生活中的混淆。col和row
正好col在row前面。很好用一个放在数组的前一个位置,另一个放在
数组的后一个位置。

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: