/*UVa 10285 Longest run on a snowboard */
import java.util.Arrays;
import java.util.Scanner;
class Main {
static final int MAX = 105;
int[][] arr = new int[MAX][MAX];//在数组外加上边框不用考虑出界的问题
int[][] d = new int[MAX][MAX];
int[] x = new int[]{-1,1,0,0};
int[] y = new int[]{0,0,-1,1};
int r,c;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Main m = new Main();
while (n > 0) {
n--;
String name = scanner.next();
m. r = scanner.nextInt();
m. c = scanner.nextInt();
for(int i=0; i<MAX; i++) {
Arrays.fill(m.arr[i], MAX);//高度不超过100 用MAX填充即可
Arrays.fill(m.d[i], 0);
}
for (int i = 1; i <= m.r; i++) {
for(int j=1; j<=m.c; j++)
m.arr[i][j] = scanner.nextInt();
}
int maxLength = 0;
for (int i=1; i<=m.r; i++) {
for(int j=1; j<=m.c; j++) {
int t = m.dp(i, j);
if (t > maxLength)
maxLength = t;
}
}
System.out.println(name + ": " + maxLength);
}
}
// 不构造有向图 直接判断是否有边
int dp(int i, int j) {
int temp = arr[i][j];
if (d[i][j] > 0)
return d[i][j];
d[i][j] = 1;
for(int k=0; k<4; k++) {
int tx = i+x[k];
int ty = j+y[k];
if(temp > arr[tx][ty]) {
int t = dp(tx,ty) + 1;
d[i][j] = d[i][j] > t ? d[i][j] : t;
}
}
return d[i][j];
}
}
UVa 10285 Longest run on a snowboard
最新推荐文章于 2019-03-22 17:43:53 发布