杭电1312 Red and Black【递归搜索】
来源:互联网 发布:js split 多个字符 编辑:程序博客网 时间:2024/05/18 02:23
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
#include<stdio.h>#include<string.h>int n,m;int hash[30][30];char map[30][30];void DFS(int x,int y){ if(x>n||y>m||hash[x][y]||map[x][y]=='#')// hash[][]==1 如果已经走过就说明已经循环了 return; hash[x][y]=1; DFS(x-1,y); DFS(x+1,y); DFS(x,y-1); DFS(x,y+1);}int main(){ while(scanf("%d%d%*c",&m,&n),n+m)//注意m,n的顺序,且要加%*c否则出错因为后面接下来的是字符输入,如果不加回车将会以字符读入。 { int x,y,i,j; memset(hash,0,sizeof(hash)); for(i=0;i<30;i++) { for(j=0;j<30;j++) { map[i][j]='#'; } }//注意初始化,为了边界 for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%c",&map[i][j]); if(map[i][j]=='@') { x=i; y=j; } } getchar(); //注意加getchar()否则会将空行当字符输入。 } DFS(x,y); int sum=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(hash[i][j]) { sum++; } } } printf("%d\n",sum); } return 0;}
#include<stdio.h>int m,n;int cnt;char a[1010][1001];void dfs(int x,int y){ if(a[x][y]=='#') return ; if(x > n || x < 1 || y > m || y < 1 ) return ; cnt++; a[x][y]='#'; dfs(x-1,y); dfs(x+1,y); dfs(x,y+1); dfs(x,y-1);}int main(){ int i,j; int x,y; while(scanf("%d%d",&m,&n),m|n) { cnt=0; for(i=1;i<=n;++i) { getchar(); for(j=1;j<=m;++j) { scanf("%c",a[i]+j); if(a[i][j]=='@') x=i,y=j; } } dfs(x,y); printf("%d\n",cnt); } return 0;}
0 0
- 杭电1312 Red and Black【递归搜索】
- 杭电 1312 Red and Black 递归 附翻译
- 杭电 1312 Red and black 搜索题
- 杭电1312 Red and Black(搜索入门)
- 杭电 1312 Red and Black BFS 搜索
- 杭电 hdu 1312 Red and Black
- 杭电 1312 Red and Black
- 杭电 1312 red and black
- 杭电1312 red and black
- 杭电1312 red and black
- hdu 杭电 1312 Red and Black
- 【杭电】[1312]Red and Black
- Red and Black【杭电1312】
- Red and Black 搜索
- 杭电(hdu)ACM 1312 Red and Black
- red and black 杭电1312 java深搜
- 杭电-1312 Red and Black(DFS)
- 杭电Red and Black。。。。水题
- Linux VPS 挂载磁盘ext3格式(重装系统数据不丢失)
- 面向对象的笔记
- oracle 建库常用命令
- java:从消息机制谈到观察者模式
- OEM AND ODM
- 杭电1312 Red and Black【递归搜索】
- MySQL忘记密码
- 光纤多模和单模的区别
- BASE64编码及SMTP协议简单实现
- 在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库
- 杭电2035 人见人爱A^B
- CSS 选择器
- 感情其实我真的输不起,原来521+365=886!
- instanceof final 抽象类的理解