package com.interview.multiarray;
/**
* Find the length of the longest chain of consecutive integers in an unsorted 2D square array (non-diagonal)
*/
public class LongestConsecutiveIntegerInUnsorted2DArray {
public int longestConsecutiveInteger(int input[][]){
boolean visited[][] = new boolean[input.length][input[0].length];
int max = 1;
for(int i=0; i < input.length; i++){
for(int j=0; j < input[i].length; j++){
int r = DFS(input,i,j,visited,-10000);
if(r > max){
max = r;
}
}
}
return max;
}
private int DFS(int input[][],int i,int j,boolean visited[][],int lastNum){
if(i >= input.length || i < 0 || j < 0 || j >= input[0].length){
return 0;
}
if(visited[i][j]){
return 0;
}
if(lastNum != -10000 && input[i][j] + 1 != lastNum){
return 0;
}
visited[i][j] = true;
int r1 = DFS(input,i+1,j,visited,input[i][j]);
int r2 = DFS(input,i-1,j,visited,input[i][j]);
int r3 = DFS(input,i,j+1,visited,input[i][j]);
int r4 = DFS(input,i,j-1,visited,input[i][j]);
visited[i][j] = false;
return Math.max(Math.max(r1, r2), Math.max(r3,r4)) + 1;
}
public static void main(String args[]){
LongestConsecutiveIntegerInUnsorted2DArray lci = new LongestConsecutiveIntegerInUnsorted2DArray();
int input[][] = {{3,2,5},
{4,1,4},
{5,6,5}};
System.out.println(lci.longestConsecutiveInteger(input));
}
}