HDU1312 Red and Black 【DFS模板】
来源:互联网 发布:网络奖状称号大全 编辑:程序博客网 时间:2024/06/07 01:30
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.
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)
6 9....#......#..............................#@...#.#..#.11 9.#..........#.#######..#.#.....#..#.#.###.#..#.#..@#.#..#.#####.#..#.......#..#########............11 6..#..#..#....#..#..#....#..#..###..#..#..#@...#..#..#....#..#..#..7 7..#.#....#.#..###.###...@...###.###..#.#....#.#..0 0
4559613
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;/*const int maxn=100;bool vst[maxn][maxn]; // 访问标记int map[maxn][maxn]; // 坐标范围int dir[4][2]= {0,1,0,-1,1,0,-1,0}; // 方向向量,(x,y)周围的四个方向bool CheckEdge(int x,int y) // 边界条件和约束条件的判断{ if(!vst[x][y] && ...) // 满足条件 return 1; else // 与约束条件冲突 return 0;}void dfs(int x,int y){ vst[x][y]=1; // 标记该节点被访问过 if(map[x][y]==G) // 出现目标态G { ...... // 做相应处理 return; } for(int i=0; i<4; i++) ACM Book BFS 52 { if(CheckEdge(x+dir[i][0],y+dir[i][1])) // 按照规则生成下一个节点 dfs(x+dir[i][0],y+dir[i][1]); } return; // 没有下层搜索节点,回溯}int main(){ ...... return 0;}*/const int maxn=20;char map[maxn][maxn];bool visit[maxn][maxn];int dx[4]= {0,1,0,-1};int dy[4]= {1,0,-1,0};int n, m, sum;void dfs(int x, int y){ int xx, yy; for(int i=0; i<4; ++i) { xx = x + dx[i]; yy = y + dy[i]; if(xx<0 || yy<0 || xx>=n || yy>=m) continue;//越界 if(map[xx][yy] == '.') { sum++; map[xx][yy] = '#'; //表示已访问过,也可以用visit数组标记 dfs(xx, yy); } }}int main(){ int fi,fj; while(~scanf("%d%d",&m,&n) && (n+m)) { sum=1; //for(int i=0; i<maxn; ++i) // for(int j=0; j<maxn; ++j) // map[i][j]=0; //此处不需初始化,多此一举 for(int i=0; i<n; ++i) { for(int j=0; j<m; ++j) { cin>>map[i][j]; if(map[i][j]=='@') { fi=i,fj=j; map[fi][fj]='#'; } } getchar(); } /*或 for(int i=0;i<n;i++) scanf("%s",&map[i]); for(int i=0; i<n; ++i) for(int j=0; j<m; ++j) if(map[i][j]=='@') { map[fi][fj]='#'; dfs(i,j); } */ dfs(fi,fj); cout<<sum<<endl; } return 0;}
0 0
- HDU1312 Red and Black 【DFS模板】
- HDU1312:Red and Black(DFS)
- hdu1312(DFS Red and Black )
- HDU1312:Red and Black(DFS)
- HDU1312 Red and Black DFS
- HDU1312 Red and Black(DFS)
- HDU1312:Red and Black(DFS)
- HDU1312:Red and Black(DFS)
- dfs hdu1312 Red and Black
- hdu1312 poj1979 Red and Black(DFS)
- hdu1312 Red and Black(DFS)
- hdu1312 Red and Black(入门dfs)
- HDU1312 Red and Black(DFS)
- HDU1312 Red and Black [DFS问题]
- HDU1312 Red and Black (DFS || BFS)
- HDU1312 Red and Black(DFS)
- HDU1312 Red and Black(DFS水)
- HDU1312 Red and Black(DFS)
- java 中的集合(七) Stack源码分析
- tensorflow可视化tensorboard “No graph definition files were found.” 错误(转)
- 安装教程:python3.5+win7+Scrapy
- DAY_01 菜狗子的修炼之路
- C++特性继承
- HDU1312 Red and Black 【DFS模板】
- 计算机算法设计与分析——递归与分治策略(一)
- 螺旋方阵
- 动态链接静态链接
- 入门经典_Chap05_题解总结
- 百度地图api简单使用
- 日月轮替
- Linux(CentOS 7)下安装Composer
- 集群中使用session的注意事项