题意是输入一个矩阵,再指定一个位置,当这个位置向8个方向扩展,根据形成的图形求出周长。
#include "stdafx.h"
#include <iostream>
#include<cstring>
using namespace std;
char str[30][30];
int dir[8][2] = { { 1,0 },{ 0,-1 },{ 0,1 },{ -1,0 },{ -1,1 },{ -1,-1 } ,{ 1,1 },{ 1,-1 } };
int DFS(int m, int n)
{
int sum = 0;
//判断当前元素的值
if (str[m][n] == 0 || str[m][n] == '.')
{
return 0;
}
str[m][n] = 0;
//判断当前元素的上下左右的值确定是否需要增加周长
for (int i = 0; i < 4; i++)
{
if (str[m + dir[i][0]][n + dir[i][1]] == '.')
{
sum++;
}
}
//从当前位置开始深度搜索
for (int i = 0; i < 8; i++)
{
sum = sum + DFS(m + dir[i][0], n + dir[i][1]);
}
return sum;
}
int main()
{
int m, n, pi, pj;
while (cin >> m >> n >> pi >> pj)
{
if (m == 0 && n == 0)
{
return 0;
}
//初始化str数组
memset(str, '.', sizeof(str));
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> str[i][j];
}
}
int sum = 0;
sum = DFS(pi, pj);
cout << sum << endl;
}
return 0;
}