Skip to content

Instantly share code, notes, and snippets.

@jianminchen
Created April 12, 2016 15:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/1fec656b154a70acb30b5f6d7ad509ab to your computer and use it in GitHub Desktop.
Save jianminchen/1fec656b154a70acb30b5f6d7ad509ab to your computer and use it in GitHub Desktop.
K index - algorithm practice
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace kIndex
{
class Program
{
static void Main(string[] args)
{
int k = Convert.ToInt16(Console.ReadLine());
int[][] arr = new int[k][];
for (int i = 0; i < k; i++)
arr[i] = new int[k];
for (int i = 0; i < k; i++)
{
string s = Console.ReadLine();
string[] aA = s.Split(' ');
if (aA.Length != k)
return;
for (int j = 0; j < k; j++)
arr[i][j] = Convert.ToInt16(aA[j].Trim());
}
int kIndex = Convert.ToInt16(Console.ReadLine());
if (kIndexFunc(arr, kIndex))
{
Console.WriteLine("YES");
}
else
Console.WriteLine("NO");
}
public static bool kIndexFunc(int[][] arr, int kIndex)
{
if (arr == null) return false;
int m = arr.Length;
int n = arr[0].Length;
if (m != n)
return false;
for (int i = 0; i < m; i++)
for (int j = 0; j < m; j++)
{
int search = arr[i][j];
if (searchInKIndex(arr, i, j, kIndex, search, m))
return true;
}
return false;
}
private static bool searchInKIndex(int[][] arr, int row, int col, int kIndex, int search, int MaxRow)
{
bool[][] searchedA = new bool[MaxRow][];
for (int i = 0; i < MaxRow; i++)
searchedA[i] = new bool[MaxRow];
for (int i = 0; i < MaxRow; i++)
for (int j = 0; j < MaxRow; j++)
searchedA[i][j] = false;
// up, down, left, right
return DFS(arr, row, col, row, col, kIndex , search, MaxRow, searchedA);
}
private static bool DFS(int[][] arr, int oriX, int oriY, int row, int col, int kIndex, int search, int MaxRow, bool[][] searchedA)
{
if (!isValid(row, MaxRow) || !isValid(col, MaxRow) || kIndex < 0)
return false;
if(Math.Abs(oriX -row) +Math.Abs(oriY-col) >0 && !searchedA[row][col])
{
if (arr[oriX][oriY] == arr[row][col])
return true;
}
else
{
searchedA[row][col] = true;
DFS(arr, oriX, oriY, row-1, col, kIndex-1, search, MaxRow, searchedA);
DFS(arr, oriX, oriY, row+1, col, kIndex-1, search, MaxRow, searchedA);
DFS(arr, oriX, oriY, row, col+1, kIndex-1, search, MaxRow, searchedA);
DFS(arr, oriX, oriY, row, col-1, kIndex-1, search, MaxRow, searchedA);
}
return false;
}
private static bool isValid(int row, int MaxRow)
{
if (row >= 0 && row < MaxRow)
return true;
else
return false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment