HDU 1312 Red and Black
来源:互联网 发布:霍金对人工智能的看法 编辑:程序博客网 时间:2024/06/01 16:32
Red and Black
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18712 Accepted Submission(s): 11337
Total Submission(s): 18712 Accepted Submission(s): 11337
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.
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
#include<iostream>#include<algorithm>#include<string.h>#include<stdlib.h>#include<time.h>#include<math.h>#include<queue>;#include<stack>;#include <iostream>#include <queue>#define mem(a) memset(a,0,sizeof(a))using namespace std;int n,m,nn,mm;char map[25][25];bool v[25][25];int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; /*移动的四种情形,分别为向上向下向左向右……*/int check(int x,int y) /*判断法此时的坐标是否符合条件*/{ if(x>=0&&x<n&&y>=0&&y<m&&!v[x][y]&&map[x][y]=='.') return 1; return 0;}void bfs(int t){ queue<int>q; q.push(t); while(!q.empty()) { t=q.front(); q.pop(); int ta=t/m,tb=t%m; for(int i=0;i<4;i++) { int tta=d[i][0]+ta,ttb=tb+d[i][1]; if(check(tta,ttb)) { v[tta][ttb]=true; q.push(tta*m+ttb); } } }}int main(){ while(cin>>m>>n,n,m) { mem(v); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>map[i][j]; if(map[i][j]=='@') nn=i,mm=j; } v[nn][mm]=true; bfs(nn*m+mm); int sum=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(v[i][j])sum++; cout<<sum<<endl; }}
DFS
#include<iostream>#include<algorithm>#include<string.h>#include<stdlib.h>#include<time.h>#include<math.h>#include<queue>;#include<stack>;#include <iostream>#include <queue>#define mem(a) memset(a,0,sizeof(a))using namespace std;char map[25][25];bool v[25][25];int d[4][2]= {{0,1},{0,-1},{1,0},{-1,0}}; /*移动的四种情形,分别为向上向下向左向右……*/int n,m,nn,mm,sum;int check(int x,int y) /*判断法此时的坐标是否符合条件*/{{ if(x>=0&&x<n&&y>=0&&y<m&&!v[x][y]&&map[x][y]=='.') return 1; return 0;}void dfs(int x,int y){ sum++; /*计数*/ v[x][y]=true; for(int i=0; i<4; i++) { int ta=x+d[i][0],tb=y+d[i][1]; if(check(ta,tb)) { v[ta][tb]=true; dfs(ta,tb); } } return ;}int main(){ while(cin>>m>>n,n,m) { mem(v); for(int i=0; i<n; i++) for(int j=0; j<m; j++) { cin>>map[i][j]; if(map[i][j]=='@') nn=i,mm=j; } sum=0; v[nn][mm]=true; dfs(nn,mm); cout<<sum<<endl; }}
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
- 递归 与 迭代 的区别对比!
- Net设计模式实例之中介者模式(Mediator Pattern)
- 向量组/矩阵/秩的理解
- C++之DLL学习
- 五、算法_动态规划_背包01
- HDU 1312 Red and Black
- Spring Security系列四 自定义决策管理器(动态权限码)
- 拉马努金恒等式
- Net设计模式实例之迭代器模式(Iterator Pattern)
- Redis学习-配置
- 正则表达式
- case when then else end用法
- HTML学习01
- 约翰伯努利定积分