/*
Sample Input
2
Feldberg 10 5
56 14 51 58 88
26 94 24 39 41
24 16 8 51 51
76 72 77 43 10
38 50 59 84 81
5 23 37 71 77
96 10 93 53 82
94 15 96 69 9
74 0 62 38 96
37 54 55 82 38
Spiral 5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Sample Output
Feldberg: 7
Spiral: 25
题意:输入一个n*m的矩阵,问从其中的任意一点开始走,最多可以走多少个位置,
(走的前提是下一个点的值要小于这个点)
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
int maxx,a[111][111];
int s[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
bool vis[111][111];
int n,m;
char str[111];
void DFS(int x,int y,int sum)
{
if(sum > maxx)
maxx = sum;
for(int i = 0; i < 4; i ++)
{
int tx = x + s[i][0];
int ty = y + s[i][1];
if(tx >= 1 && tx <= n && ty >= 1 && ty <= m && !vis[tx][ty])
if(a[tx][ty] > a[x][y])
{
vis[tx][ty] = 1;
DFS(tx,ty,sum + 1);
vis[tx][ty] = 0;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T --)
{
memset(a,0,sizeof(a));
scanf("%s%d%d",str,&n,&m);
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; ++ j)
scanf("%d",&a[i][j]);
maxx = -1;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
{
memset(vis,0,sizeof(vis));
DFS(i,j,1);
}
printf("%s: %d\n",str,maxx);
}
}