hdu 1312 Red And Black
来源:互联网 发布:mac的系统盘在哪里 编辑:程序博客网 时间:2024/05/05 20:40
hdu 1312 的传送门
Problem 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.
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)
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).
解题思路:最简单的dfs和bfs,个人还是建议用dfs,时间短,而且还好写;
具体的上代码;
#include <iostream>#include <cstring>using namespace std;char map[30][30];bool vis[30][30];int qx[900],qy[900];//bfsint dir[4][2]= {1,0,-1,0,0,1,0,-1};int n,m,ans;/*void bfs(int x, int y){ int l=0,r=0; qx[r]=x,qy[r++]=y; vis[x][y]=1; ans++; int nx,ny; while(l<r) { int curx=qx[l],cury=qy[l++]; for(int i=0; i<4; i++) { nx=curx+dir[i][0]; ny=cury+dir[i][1]; if(nx>=0&&nx<n && ny>=0&&ny<m && !vis[nx][ny] && map[nx][ny]!='#') { vis[nx][ny]=1; ans++; qx[r]=nx,qy[r++]=ny; } } }}*/void dfs(int x, int y){ ans++; vis[x][y]=1;//可以不用 map[x][y]='#'; for(int i=0; i<4; i++) { int nx=x+dir[i][0]; int ny=y+dir[i][1]; if(nx>=0&&nx<n && ny>=0&&ny<m &&!vis[nx][ny]&& map[nx][ny]!='#') { dfs(nx, ny); } } //cout<<ans<<endl;}int main(){ while(cin>>m>>n, m,n) { memset(vis, 0, sizeof(vis)); ans=0; int sx,sy; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { cin>>map[i][j]; if(map[i][j] == '@') sx=i,sy=j; } } //bfs(sx, sy); dfs(sx, sy); cout<<ans<<endl; } return 0;}/*6 9....#......#..............................#@...#.#..#.11 9.#..........#.#######..#.#.....#..#.#.###.#..#.#..@#.#..#.#####.#..#.......#..#########............11 6..#..#..#....#..#..#....#..#..###..#..#..#@...#..#..#....#..#..#..7 7..#.#....#.#..###.###...@...###.###..#.#....#.#..0 0*/
- Red and Black hdu 1312
- HDU 1312 Red and Black
- HDU 1312 Red and Black
- hdu 1312 Red and Black
- Hdu 1312 - Red and Black
- hdu-1312-Red and Black
- hdu 1312Red and Black
- hdu 1312 Red and Black
- hdu - 1312 - Red and Black
- hdu 1312 Red and Black
- hdu 1312 Red and Black
- HDU-1312(red and black)
- HDU 1312 Red and Black
- hdu 1312 Red and Black
- HDU 1312 Red and Black
- hdu 1312 Red and Black
- hdu 1312 Red and Black
- hdu 1312 Red and Black
- 修心
- eclipse debug 多线程
- golang 1.5 预计 8 月11 日发布
- IOS开源库收集整理
- 聊天语音气泡长度控制
- hdu 1312 Red And Black
- yii jquery折叠、弹对话框、拖拽、滑动条、ol和ul列表、局部内容切换
- Hadoop集群(第10期)_MySQL关系数据库
- Discovery(2)
- Hadoop集群(第10期副刊)_常用MySQL数据库命令
- 回溯
- Linux常用命令
- 程序猿进化必读:让App的运行速度与响应速度趋于一流(iOS)
- Mybatis 源码解析(一) - Configuration.xml加载