dalao

学术版

```cpp #include<iostream> #include<cstdio> #include<cstring> using namespace std; char cz[25][25]; int sw[25][25],w,h,ans=0,ans1=0,dx[4]={0,1,0,-1},dy[4]={1,0,-1,0}; void dfs(int x1,int y1){ //cout << w << h; for(int i=0;i<=3;i++){ ans1++; int x=x1+dx[i],y=y1+dy[i]; //cout << x << " " << y << endl; if(x>=0&&x<=w&&y>=0&&y<=h&&sw[x][y]==1){ ans++; sw[x][y]=0; dfs(x1+dx[i],y1+dy[i]); //cout << x << " " << y << endl; } } } int main(){ int x1,y1; cin >> w >> h; w=w-1;h=h-1; //freopen(".in","r",stdin); //freopen(".out","w",stdout); for(int i=0;i<=h;i++){ for(int j=0;j<=w;j++){ cin >> cz[i][j]; if(cz[i][j]=='@'){ x1=j;y1=i; sw[i][j]=0; } if(cz[i][j]=='.'){ sw[i][j]=1; } if(cz[i][j]=='#'){ sw[i][j]=0; } } } dfs(x1,y1); cout << ans; return 0; } ```
by yqtwrzw @ 2018-06-04 09:59:03


题目: 总时间限制: 1000ms 内存限制:  65536kB 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。 请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入 每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。 在接下来的H行中,每行包括W个字符。每个字符 表示一块瓷砖的颜色,规则如下1)‘.’:黑色的瓷砖2)‘#’:白色的瓷砖;3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。当在一行中读入的是两个零时,表示输入结束。输出 对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数 (记数时包括初始位置的瓷砖)。
by yqtwrzw @ 2018-06-04 10:01:19


|