hdoj 1312解题报告

来源:互联网 发布:漯河网络电视台 编辑:程序博客网 时间:2024/06/04 09:59
#include<iostream>#include<stdio.h>#include<string>using namespace std;#define MAX 25char 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;elsereturn 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前面。很好用一个放在数组的前一个位置,另一个放在数组的后一个位置。*/


原创粉丝点击