View Code of Problem 17

#include<bits/stdc++.h>
using namespace std;

int m,n;
int a[105][105];
int vis[105][105];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
int maxs;
void find(int x,int y,int step){
	vis[x][y]=1;
	if(x<1||x>n||y<1||y>m){
		return;
	}
	if(a[x][y]>a[x+1][y]&&a[x][y]>a[x-1][y]&&a[x][y]>a[x][y-1]&&a[x][y]>a[x][y+1]){
		if(step>maxs){
			maxs=step;
		}
		return;
	}
	for(int i=0;i<4;i++){
		int nx=x+dir[i][0];
		int ny=y+dir[i][1];
		if(vis[nx][ny]==0&&a[nx][ny]>a[x][y]){
			vis[nx][ny]=1;
			find(nx,ny,step+1);
			vis[nx][ny]=0;
		}
	}
}
 
int main() {
 
	
	while(cin>>n>>m){
		maxs=0;
		memset(a,0,sizeof(a));
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>a[i][j];
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				memset(vis,0,sizeof(vis));
				find(i,j,0);
			}
		}
		cout<<maxs<<endl;
	} 
	
	return 0;
}

Double click to view unformatted code.


Back to problem 17