- 本题意思就是有一片池塘,池塘中有许多的小山谷,现在想知道池塘的深度。在N*M的矩阵中,0代表湖上的一个小岛。其余数字代表池塘的深度,如果其相邻的八个方向有相同的数字,则这个数为其池塘深度,现在要求能确定的池塘的最深深度。
解题思路:
用深搜,直接搜其八个方向,用数组存其能确定的最大深度,不断刷新数组,找出最大深度即可。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
int dx[8]={1,1,-1,-1,0,0,1,-1};///定义其八个方向
int dy[8]={0,1,0,-1,1,-1,-1,1};///定义其八个方向
int map[55][55];
int main()
{
int T,M,N,i,j,k;
scanf("%d",&T);
while(T--)
{
int maxx=-1;
memset(map,-1,sizeof(map));
scanf("%d%d",&M,&N);
for(i=1; i<=M; i++)
{
for(j=1; j<=N; j++)
{
scanf("%d",&map[i][j]);
}
}
for(i=1; i<=M; i++)
{
for(j=1; j<=N; j++)
{
if(maxx>map[i][j])
continue;
for(k=0; k<8; k++)
{
if(map[i][j]==map[i+dx[k]][j+dy[k]])
maxx=map[i][j];
}
}
}
printf("%d\n",maxx);
}
}