码迷,mamicode.com
首页 > 其他好文 > 详细

寒假刷题之普通之红与黑

时间:2017-01-19 12:37:42      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:设立   false   main   个数   数据   dfs   des   size   颜色   

Description - 题目描述

有个铺满方形瓷砖的矩形房间,每块瓷砖的颜色非红即黑。某人在一块砖上,他可以移动到相邻的四块砖上。但他只能走黑砖,不能走红砖。

敲个程序统计一下这样可以走到几块红砖上。

Input - 输入

多组测试用例。每组数组开头有两个正整数W和H;W与H分别表示 x- 与 y- 方向上瓷砖的数量。W和W均不超过20。

还有H行数据,每行包含W个字符。每个字符表示各色瓷砖如下。

‘.‘ - 一块黑砖
‘#‘ - 一块红砖
‘@‘ - 一个黑砖上的人(一组数据一个人)
输入以一行两个零为结束。

Output - 输出

对于每组测试用例,输出他从起始砖出发所能抵达的瓷砖数量(包括起始砖)。

Sample Input - 输入样例

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0

Sample Output - 输出样例

45
59
6
13


分析:
  感觉这个系列的题目都是比较水一点的,不过对于搜索入门的话,还是会比较适合就是了,闲来无事就随便写了写题解。
  对于BFS和DFS,感觉BFS一般是用来求解最值问题,然后DFS只是确认某个问题的答案或者某个要求是否可以到达。
  这个题只是单纯的问能到达砖块的个数,所以采用的是DFS.

  将输入的地图进行遍历找到当前位置,然后设为起始点,设立一个方向数组,用来决定前进的方向,即上下左右,
  将经过的位置进行标记,然后遍历整个地图之后的结果就是答案。


代码:
  

#include <stdio.h>
#include <string.h>

int n, m, ans=0;
char map[25][25];
bool isVisited[25][25];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};

bool isIn(int x, int y){
 
 if(x<0 || x>=n || y<0 || y>=m || isVisited[x][y] == true || map[x][y] == ‘#‘)
  return false;
 return true;
}

void doIt(int x, int y){
 
 isVisited[x][y] = true;
 ans++;
}

void DFS(int x, int y){
 
 for(int i=0;i<4;i++)
  if(isIn(x+dir[i][0], y+dir[i][1])){
   doIt(x+dir[i][0], y+dir[i][1]);
   DFS(x+dir[i][0], y+dir[i][1]);
  }
}

int main(){
 
 while(scanf("%d%d ",&m, &n) == 2){
  if(n==0 && m==0) break;
  int x, y; 
  for(int i=0; i<n; i++){
   scanf("%s",map[i]);
   for(int j=0; j<m; j++)
    if(map[i][j] == ‘@‘){
     x=i;
     y=j;
    }
  }
  memset(isVisited,false,sizeof(isVisited));
  ans = 1;
  isVisited[x][y] = true;
  DFS(x,y);
  printf("%d\n",ans);
 }
 return 0;
}

寒假刷题之普通之红与黑

标签:设立   false   main   个数   数据   dfs   des   size   颜色   

原文地址:http://www.cnblogs.com/huaixiaohai2015/p/6306037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!