Dobrý den, tak jsem narazil na problém. Kód funguje, dokud se nedostane do levého horního rohu bludiště, kde skončí přetečením na X souřadnici. Nechápu proč, když je tam pevně nastavená podmínka, že souřadnice musí být větší než nula. Něco mi asi uniká. Dík za každý tip.
{
// Prostředí, ve kterém hledáme cestu (1 = překážka, 0 = volná plocha)
static int[,] prostredi = new int[12, 12]
{
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1 },
{ 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1 },
{ 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
{ 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1 },
{ 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },
{ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
};
static Bod pocatecniBod = new Bod(4, 7, 2);
static Bod cilovyBod = new Bod(8, 9, int.MaxValue);
List<Bod> souradniceList = new List<Bod>();
static void Main(string[] args)
{
prostredi[8, 9] = int.MaxValue;
Queue<Bod> souradnice = new Queue<Bod>();
int maxVal = 2;
souradnice.Enqueue(pocatecniBod);
do
{
for (int i = 0; i < 4; i++)
{
if ((prostredi[pocatecniBod.X, pocatecniBod.Y - 1] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
{
prostredi[pocatecniBod.X, pocatecniBod.Y - 1] = maxVal;
pocatecniBod.Y = pocatecniBod.Y - 1;
souradnice.Enqueue(pocatecniBod);
}
if ((prostredi[pocatecniBod.X - 1, pocatecniBod.Y] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
{
prostredi[pocatecniBod.X - 1, pocatecniBod.Y] = maxVal;
pocatecniBod.X = pocatecniBod.X - 1;
souradnice.Enqueue(pocatecniBod);
}
if ((prostredi[pocatecniBod.X, pocatecniBod.Y + 1] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
{
prostredi[pocatecniBod.X, pocatecniBod.Y + 1] = maxVal;
pocatecniBod.Y = pocatecniBod.Y + 1;
souradnice.Enqueue(pocatecniBod);
}
if ((prostredi[pocatecniBod.X + 1, pocatecniBod.Y] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
{
prostredi[pocatecniBod.X + 1, pocatecniBod.Y] = maxVal;
pocatecniBod.X = pocatecniBod.X - 1;
souradnice.Enqueue(pocatecniBod);
}
maxVal++;
pocatecniBod = souradnice.Dequeue();
//Console.WriteLine(pocatecniBod.X.ToString());
//Console.WriteLine(pocatecniBod.Y.ToString());
Console.ReadKey();
Vykresli();
}
}while (pocatecniBod.Hodnota != int.MaxValue);
}
static void Vykresli()
{
Console.Clear();
for (int j = 0; j <= 11 ; j++)
{
for (int i = 0; i <= 11; i++)
{
Console.Write(prostredi[i, j] + ", ");
}
Console.WriteLine();
}
}
}
struct Bod
{
public int X { get; set; }
public int Y { get; set; }
public int Hodnota { get; set; }
public Bod(int x, int y, int hodnota) : this()
{
X = x;
Y = y;
Hodnota = hodnota;
}
public override string ToString()
{
return "X: " + X + ", Y: " + Y;
}
}