本文主要是介绍Red and Black_ POJ 1979,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Red and Black
有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或者黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一。但是他不能移到红砖上,只能移动到黑砖上。编写一个程序,计算通过重复上述移动所能经过的黑砖数。
输入
输入包含多个数据集,一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20。
每个数据集有H行,其中每行包括W个字符。每个字符的含义如下:
‘.’ – 黑砖
‘#’ – 红砖
‘@’ – 男子当前所在的位置。
两个0表示输入结束。
输出
对每个数据集,程序应该输出一行,包含男子从初始瓷砖出发可到达的瓷砖数。
分析
使用回溯法。递归求解男子经过的瓷砖数。
代码实现
#include <iostream>using namespace std;
char room[21][21];
void blackBrick(int i,int j);
int ans = 0;
int w,h;
int main()
{int x,y;int result = 0;while(cin >> w >> h && (w || h)){for (int i = 0; i < h; ++i){for (int j = 0; j < w; ++j){cin >> room[i][j];if (room[i][j] == '@'){x = i;y = j;}}}blackBrick(x,y);cout << ans << endl;ans = 0;}return 0;
}void blackBrick(int i,int j)
{if (i < 0 || j < 0 || i > h-1 || j > w-1 || room[i][j] == '#' || room[i][j] == 'y'){return;}room[i][j] = 'y';ans++;blackBrick(i-1,j);blackBrick(i+1,j);blackBrick(i,j-1);blackBrick(i,j+1);
}
这篇关于Red and Black_ POJ 1979的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!