递归搜索方法标题,采用递归搜索方法,但是,如果没有迭代计算的真正的政党格。
我们的想法是:
1 每一个搜索为党格要改变电流方向格的值至 ‘*’,或任何其他非'.'的值,代表方格了
2 递归的时候不回复这个方格的值,就实际上不用反复搜索这个方格了。故此不用回溯
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int R, C, blacks;
vector<string> board;
inline bool isLegal(int r, int c)
{
return r>=0 && c>=0 && r<R && c<C && board[r][c] == '.';
}
void getBlacks(int r, int c)
{
blacks++;
board[r][c] = '*';
if (isLegal(r-1, c)) getBlacks(r-1, c);
if (isLegal(r+1, c)) getBlacks(r+1, c);
if (isLegal(r, c-1)) getBlacks(r, c-1);
if (isLegal(r, c+1)) getBlacks(r, c+1);
}
int main()
{
string s;
while (cin>>C>>R && C)
{
board.clear();
for (int i = 0; i < R; i++)
{
cin>>s;
board.push_back(s);
}
blacks = 0;
for (unsigned i = 0; i < board.size(); i++)
{
for (unsigned j = 0; j < board[0].size(); j++)
{
if ('@' == board[i][j])
{
getBlacks((int)i, (int)j);
goto out;
}
}
}
out:;
printf("%d\n", blacks);
}
return 0;
}
版权声明:笔者心脏靖。景空间地址:http://blog.csdn.net/kenden23/,可能不会在未经作者同意转载。