hdu_1312_Red and Black
来源:互联网 发布:阴阳师 没落 知乎 编辑:程序博客网 时间:2024/06/04 17:58
Description
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.
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)
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)
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
4559613比较基础的bfs题,是我学习bfs后做的第一道,初始化vis[][]数组,置所有vis的值为0,所有能访问到的位置都为1,最后输出值为1的位置的个数即可。#include <iostream>#include <stdio.h>#include <string.h>#include <queue>using namespace std;char a[22][22];int vis[22][22];int dx[4]={-1,1,0,0};int dy[4]={0,0,-1,1};struct node{ int x,y;}cur,nex;queue<node> qu;int bfs(node sta,int w,int h){ //cout<<sta.x<<" "<<sta.y; int cnt=0,nx,ny; qu.push(sta);cnt++; node p,n; while(!qu.empty()) { //cout<<"ok"; n=qu.front(); qu.pop(); for(int i=0;i<4;i++) { nx=n.x+dx[i]; ny=n.y+dy[i]; if(nx>=0 && nx<h && ny>=0&&ny<w && vis[nx][ny]==0 && a[nx][ny]=='.') { p.x=nx; p.y=ny; vis[p.x][p.y]=1; qu.push(p); //cout<<"ok"; cnt++; } } } return cnt;}int main(){ int w,h; while(scanf("%d%d",&w,&h)!=EOF&&w&&h) { node sta; memset(vis,0,sizeof(vis)); for(int i=0;i<h;i++) scanf("%s",a[i]); //把起点的位置找到 for(int i=0;i<h;i++) for(int j=0;j<w;j++) if(a[i][j]=='@') { sta.x=i,sta.y=j; break; } vis[sta.x][sta.y]=1; //cout<<"ok"; /*for(int i=1;i<=h;i++) for(int j=1;j<=w;j++) { printf("%c ",a[i][j]); cout<<endl; }*/ printf("%d\n",bfs(sta,w,h)); } return 0;}
0 0
- hdu_1312_Red and Black
- HDU_1312_Red and Black
- Red and Black
- red and black
- POJ_1979_Red and Black
- poj1979Red and Black
- Black Berry and IPhone
- HDUOJ1312 Red and Black
- Red and Black
- red and black
- Red and Black
- HDOJ Red and Black
- HDU1312( Red and Black )
- Red and Black
- hdu1312 Red and Black
- 深搜:Red and Black
- Black And White
- BIT1038Red and Black
- 02-scanf函数的基本使用
- 黑马程序员——Java基础-反射学习
- linux之sed用法
- 程序员面试宝典一周目第五天
- HDU 5311 Sequence
- hdu_1312_Red and Black
- 03-scanf小练习
- cocos2d-x 2.2 在WINDOWS中如何创建项目
- Android笔记——UI开发
- fastjson忽略某个属性
- COM开发理论知识
- OC语言类的扩展
- 建模与编程
- 美容觉是几点到几点?