1. 程式人生 > 實用技巧 >Acwing 901.滑雪

Acwing 901.滑雪

給定一個R行C列的矩陣,表示一個矩形網格滑雪場。

矩陣中第 i 行第 j 列的點表示滑雪場的第 i 行第 j 列區域的高度。

一個人從滑雪場中的某個區域內出發,每次可以向上下左右任意一個方向滑動一個單位距離。

當然,一個人能夠滑動到某相鄰區域的前提是該區域的高度低於自己目前所在區域的高度。

#include<bits/stdc++.h>
#define N 1000
using namespace std;
int a[N][N];
int f[N][N];
int dx[]={0,0,0,1,-1};
int dy[]={0,1,-1,0,0};
int n,m,maxx;
void dfs(int
x,int y) { if(f[x][y])return; for(int i=1;i<=4;i++) { int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[x][y]>a[xx][yy]) { dfs(xx,yy); f[x][y]=max(f[x][y],f[xx][yy]+1
); } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { dfs(i,j); maxx=max(maxx,f[i][j]); } printf(
"%d",maxx+1); return 0; }