A
I'm not strong in the counts, but the rutfors has made a decision.public static bool findSum(int[,] mat, int sum, int[,] path)
{
for (int i = 0; i < mat.GetLength(0); i++)
for (int j = 0; j < mat.GetLength(1); j++)
if (findSum(mat, sum, path, i, j)) return true;
return false;
}
public static bool findSum(int[,] mat, int sum, int[,] path, int i, int j)
{
if (sum < 0) return false;
if (i < 0 || i >= mat.GetLength(0)) return false;
if (j < 0 || j >= mat.GetLength(1)) return false;
if (path[i, j] == 1) return false;
if (sum == 0) return true;
path[i, j] = 1;
if (findSum(mat, sum - mat[i, j], path, i - 1, j)) return true;
if (findSum(mat, sum - mat[i, j], path, i, j - 1)) return true;
if (findSum(mat, sum - mat[i, j], path, i + 1, j)) return true;
if (findSum(mat, sum - mat[i, j], path, i, j + 1)) return true;
path[i, j] = 0;
return false;
}
Checking like this.var mat = new int[,] {
{1, 1, 1, 1},
{100, 100, 100, 1},
{100, 100, 100, 1},
{1, 1, 1, 1},
};
var path = new int[,] {
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
{0, 0, 0, 0},
};
Console.WriteLine(findSum(mat, 600, path));
path.Dump("path");
The result is that