/* 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); } }