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前面。很好用一个放在数组的前一个位置,另一个放在 数组的后一个位置。 */
相关文章推荐
- 解题报告-HDOJ-1385(最短路径——Floyd)
- HDOJ 1239:Calling Extraterrestrial Intelligence Again 解题报告
- POJ-1411 & HDOJ-1239 Calling Extraterrestrial Intelligence Again 解题报告
- HDOJ1236 排名解题报告
- POJ-1142 & HDOJ-1333 Smith Numbers 解题报告
- hdoj2003解题报告
- HDOJ-5012-Dice 解题报告
- HDOJ-1709-The Balance 解题报告
- LA-2523 & POJ-1325 & HDOJ-1150 Machine Schedule 解题报告
- hdoj4611解题报告
- HDOJ1013解题报告
- HDOJ 4284-Travel解题报告
- ACM--HDOJ1201解题报告
- HDOJ 1238:Substrings 寻找最长子序列 解题报告
- hdoj-2565-放大的X(解题报告)
- HDOJ 1032 The 3n + 1 problem解题报告
- HDOJ 1133 Buy the Ticket 简单解题报告
- hdoj1010(temper of the bone) 解题报告
- hdoj2003解题报告
- hdoj2007解题报告