View Code of Problem 17

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

int step_sum(vector<vector<int> > step,int i,int j,int n)
{
  int n1[4]={0},flag[4]={0},mmax=0;
  if(step[i+1][j]-step[i][j]==1) {n1[0]=step_sum(step,i+1,j,n+1);flag[0]=1;}
  if(step[i-1][j]-step[i][j]==1) {n1[1]=step_sum(step,i-1,j,n+1);flag[1]=1;}
  if(step[i][j-1]-step[i][j]==1) {n1[2]=step_sum(step,i,j-1,n+1);flag[2]=1;}
  if(step[i][j+1]-step[i][j]==1) {n1[3]=step_sum(step,i,j+1,n+1);flag[3]=1;}
  for(int i=0;i<4;++i)
    if(mmax<n1[i])
      mmax=n1[i];
  if(flag[0]||flag[1]||flag[2]||flag[3])
    return mmax;
  else
    return n;
}

int main(void)
{
  int n,m,i,j,mmax=0;
  cin>>n>>m;
  vector<vector<int> > step(n+2,vector<int>(m+2,10000));
  for(i=1;i<=n;++i)
    for(j=1;j<=m;++j)
      cin>>step[i][j];
    for(i=1;i<=n;++i)
      for(j=1;j<=m;++j)
        mmax=max(mmax,step_sum(step,i,j,0));
      cout<<mmax<<endl;   
}

Double click to view unformatted code.


Back to problem 17