【NOI】1818 红与黑
来源:互联网 发布:天龙八部源码 编辑:程序博客网 时间:2024/05/15 23:54
描述
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
输入
包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下
1)‘.’:黑色的瓷砖;
2)‘#’:白色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。
当在一行中读入的是两个零时,表示输入结束。
输出
对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。
-
这次……真的是BFS纯板子题了
总数就是队列长度
注意多组数据
注意变量初始化
#include<cstdio>#include<cstring>using namespace std;int n,m,s, X[5]={ 0, 1, 0,-1}, Y[5]={ 1, 0,-1, 0}; //右 下 左 上 bool a[23][23];int main(){ while(true) { memset(a,0,sizeof(a)); int x[410],y[410],h,l; h=l=1; scanf("%d%d",&m,&n); //n行m列 if(m==0) return 0; for(int i=1;i<=n;++i) { char c[2]; gets(c);//吃空格 for(int j=1;j<=m;++j) { scanf("%c",&c[0]); switch(c[0]) { case '#':a[i][j]=1;break;//红的 case '@':x[1]=i;y[1]=j;break;//起点 } } } a[x[1]][y[1]]=1; do { for(int i=0;i<4;++i)//循环方向 { int xx=x[h]+X[i], yy=y[h]+Y[i];//移动后的坐标 if(!a[xx][yy]) if(xx>=1&&xx<=n&&yy>=1&&yy<=m)//在地图里 { ++l;//继续走 x[l]=xx;y[l]=yy;//存坐标 a[xx][yy]=1; } } ++h; } while(h<=l); printf("%d\n",l); } return 0;}
0 0
- 【NOI】1818 红与黑
- 【NOI OJ】1818 红与黑
- 1818:红与黑
- 红与黑
- bfs红与黑
- 递归~红与黑
- 长城汽车红与黑
- 红与黑
- codevs2806红与黑
- 递归--红与黑
- 红与黑
- POJ2816红与黑
- 红与黑
- 红与黑
- 《红与黑》读后感
- 红与黑HNCU1103
- IDF红与黑
- 红与黑
- 近代史的论述题资料
- JSP脚本中的9个内置对象---05 pageContext对象
- 设置模式的六大yuanze
- javascript深入理解js闭包
- 第五章 单件模式
- 【NOI】1818 红与黑
- 【整理】MySQL引擎
- Android Studio项目目录结构介绍
- 平凡的每一年,平凡的每一天
- UGUI和NGUI性能对比
- sqoop将mysql数据导入到hive指定的数据库中
- Stylus入门教程--实例(2)
- BZOJ2938: [Poi2000]病毒 AC自动机
- android Intent机制详解