A - Red and Black(板子)
题目描述
题面
There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can’t move on red tiles, he can move only on black tiles.
Write a program to count the number of black tiles which he can reach by repeating the moves described above.
Input
The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20.
There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows.
‘.’ - a black tile
‘#’ - a red tile
‘@’ - a man on a black tile(appears exactly once in a data set)
The end of the input is indicated by a line consisting of two zeros.
Output
For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).
Sample Input
6 9
…#.
…#
…
…
…
…
…
#@…#
.#…#.
11 9
.#…
.#.#######.
.#.#…#.
.#.#.###.#.
.#.#…@#.#.
.#.#####.#.
.#…#.
.#########.
…
11 6
…#…#…#…
…#…#…#…
…#…#…###
…#…#…#@.
…#…#…#…
…#…#…#…
7 7
…#.#…
…#.#…
###.###
…@…
###.###
…#.#…
…#.#…
0 0
Sample Output
45
59
6
13
代码
#include <cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include <iomanip>
#include <queue>
#include <stack>
using namespace std;
const int dx[5]= {0,0,0,-1,1};
const int dy[5]= {0,1,-1,0,0};
char tu[105][105];
int ans=1;
int cx,cy;
bool vis[105][105];
int lie,hang;
void cuntu()
{
for(int i=1; i<=hang; i++)
{
for(int j=1; j<=lie; j++)
{
char t=getchar();
tu[i][j]=t;
if(t=='@')
{
cx=i;
cy=j;
}
}
getchar();
}
return;
}
bool judge(int x,int y)
{
if(x<1||y<1||x>hang||y>lie||vis[x][y]==1||tu[x][y]=='#')
return false;
return true;
}
void dfs(int a,int b)
{
vis[a][b]=1;
for(int i=1; i<=4; i++)
{
int tx=a+dx[i];
int ty=b+dy[i];
if(judge(tx,ty))
{
ans+=1;
dfs(tx,ty);
}
}
return;
}
int main()
{
while(cin>>lie>>hang)
{
getchar();
if(lie==0&&hang==0)
{
break;
}
else
{
memset(vis,0,sizeof(vis));
memset(tu,0,sizeof(tu));
ans=1;
cuntu();
dfs(cx,cy);
cout<<ans<<endl;
//tiaoshi
// for(int i=1; i<=hang; i++)
// {
// for(int j=1; j<=lie; j++)
// {
// cout<<tu[i][j]<<" ";
// }
// cout<<endl;
// }
// cout<<cx<<" "<<cy<<endl;
}
}
return 0;
}
新手仍处于迷迷糊糊的状态,注释等我再想想
上一篇: leetcode116. 填充每个节点的下一个右侧节点指针
下一篇: 激动呀,htc desire s g12 4.0 RUU包htc 官方下载地址已放出,有图为证 RUUhtcdesire sics4.0
推荐阅读
-
Win7下硬盘安装 Red Hat Enterprise Linux 6.0 ES图文方法
-
古代大臣上朝时手里拿的板子是什么?有何作用?
-
今天闺女犯错被老公惩罚打一板子
-
映众GTX1080 Black冰龙黑金版显卡天梯图评测和拆解
-
三星Galaxy S11全力备货:PCB板子已于月初量产
-
Red Hat Linux,Apache2.0+Weblogic9.2负载均衡集群安装配置
-
宋朝官员上朝时手里拿的板子是什么?
-
Red Hat Linux上使用BIND建立DNS服务器
-
赛睿Sensei 310 Glossy Red火星红开箱图赏:鲜红夺目
-
经过了近两年的跳票后 RED Hydrogen One钛合金版终于开始出货