Given an 8 x 8 matrix, find all possible paths, moving one cell downwards or one cell to the right (one cell per movement) from cell (0,0) to cell (7,7)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MatrixWalk
{
class Program
{
const int rows = 8;
const int cols = 8;
static void Main(string[] args)
{
var path = new List<Tuple<int,int>>();
int totalPaths = 0;
GetPaths(0, 0, ref path, ref totalPaths);
}
public static void GetPaths(int x, int y, ref List<Tuple<int, int>> path, ref int totalPaths)
{
if (x < rows && y < cols)
path.Add(Tuple.Create(x, y));
if (x == rows-1 && y == cols-1)
{
totalPaths += 1;
PrintPath(path, totalPaths);
}
if (x + 1 < rows)
GetPaths(x + 1, y, ref path, ref totalPaths);
if (y + 1 < cols)
GetPaths(x, y + 1, ref path, ref totalPaths);
path.RemoveAt(path.Count - 1);
}
public static void PrintPath( List<Tuple<int, int>> path, int totalPaths)
{
Console.WriteLine("-------------------------------");
Console.WriteLine("Path number: {0}", totalPaths);
Console.WriteLine("Path Size: {0}", path.Count);
System.Diagnostics.Debug.Assert(path.Count == rows+cols-1);
for (int i = 0; i < path.Count; i++)
{
Console.Write("[{0},{1}]", path[i].Item1, path[i].Item2);
}
Console.WriteLine();
Console.WriteLine("-------------------------------");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MatrixWalk
{
class Program
{
const int rows = 8;
const int cols = 8;
static void Main(string[] args)
{
var path = new List<Tuple<int,int>>();
int totalPaths = 0;
GetPaths(0, 0, ref path, ref totalPaths);
}
public static void GetPaths(int x, int y, ref List<Tuple<int, int>> path, ref int totalPaths)
{
if (x < rows && y < cols)
path.Add(Tuple.Create(x, y));
if (x == rows-1 && y == cols-1)
{
totalPaths += 1;
PrintPath(path, totalPaths);
}
if (x + 1 < rows)
GetPaths(x + 1, y, ref path, ref totalPaths);
if (y + 1 < cols)
GetPaths(x, y + 1, ref path, ref totalPaths);
path.RemoveAt(path.Count - 1);
}
public static void PrintPath( List<Tuple<int, int>> path, int totalPaths)
{
Console.WriteLine("-------------------------------");
Console.WriteLine("Path number: {0}", totalPaths);
Console.WriteLine("Path Size: {0}", path.Count);
System.Diagnostics.Debug.Assert(path.Count == rows+cols-1);
for (int i = 0; i < path.Count; i++)
{
Console.Write("[{0},{1}]", path[i].Item1, path[i].Item2);
}
Console.WriteLine();
Console.WriteLine("-------------------------------");
}
}
}
No comments:
Post a Comment