I am trying to write a simple C ++ program to fill a maze with distances from the starting point, but I cannot.
And the code:
#include <stack>
#include<iostream>
#include <iomanip>
using namespace std;
class Coord
{
public:
Coord(int rr, int cc) : m_r(rr), m_c(cc) {}
int r() const { return m_r; }
int c() const { return m_c; }
private:
int m_r;
int m_c;
};
int minimum(int a[],int size)
{
int small=a[0];
for(int i=0;i<size;i++)
if(a[i]<small)
small=a[i];
return small;
}
void determineDistances(const char maze[][10], int sr, int sc, int dist[][10])
{
stack<Coord> coordStack;
coordStack.push(Coord(sr,sc));
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
{
dist[i][j]=99;
}
dist[sr][sc]=0;
int distarr[4];
int min;
int currval;
while (!coordStack.empty())
{
Coord inuse = coordStack.top();
coordStack.pop();
const int row = inuse.r();
const int col = inuse.c();
cout<<"test row "<<row<<" col "<<col<<endl;
distarr[0]=dist[row-1][col];
distarr[1]=dist[row+1][col];
distarr[2]=dist[row][col-1];
distarr[3]=dist[row][col+1];
min=minimum(distarr,4);
if(dist[row][col]>min+1)
dist[row][col]=min+1;
currval=dist[row][col];
if ((maze[row-1][col] == '.')&&(dist[row-1][col]>(currval+1)))
{
dist[row-1][col]=currval+1;
coordStack.push(Coord(row+1,col));
}
if (maze[row+1][col] == '.'&&(dist[row+1][col]>(currval+1)))
{
dist[row+1][col]=currval+1;
coordStack.push(Coord(row+1,col));
}
if (maze[row][col+1] == '.'&&(dist[row][col+1]>(currval+1)))
{
dist[row][col+1]=currval+1;
coordStack.push(Coord(row,col+1));
}
if (maze[row][col-1] == '.'&&(dist[row][col-1]>(currval+1)))
{
dist[row][col-1]=dist[row][col]+1;
coordStack.push(Coord(row,col-1));
}
}
}
int main()
{
char myMaze[10][10] = {
{ 'X','X','X','X','X','X','X','X','X','X'},
{ 'X','.','.','.','.','.','X','.','.','X'},
{ 'X','X','.','X','X','.','.','.','.','X'},
{ 'X','.','.','X','.','.','.','X','.','X'},
{ 'X','.','.','.','X','X','.','X','X','X'},
{ 'X','X','X','.','.','.','.','X','.','X'},
{ 'X','X','.','.','.','X','.','X','.','X'},
{ 'X','X','.','X','.','X','.','X','X','X'},
{ 'X','X','.','.','.','X','.','.','.','X'},
{ 'X','X','X','X','X','X','X','X','X','X'}
};
int distances[10][10];
determineDistances(myMaze, 6, 3, distances);
for (int r = 0; r < 10; r++)
{
for (int c = 0; c < 10; c++)
cout << ' ' << setw(2) << distances[r][c];
cout << endl;
}
std::cin.get();
}
Conclusion:
test row 6 col 3
test row 6 col 2
test row 7 col 2
test row 8 col 2
test row 8 col 3
test row 8 col 4
test row 9 col 4
test row 6 col 4
test row 7 col 4
test row 8 col 4
test row 7 col 4
test row 7 col 3
test row 8 col 3
99 99 99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99 99 99
99 99 99 1 2 99 99 99 99 99
99 99 1 0 1 99 99 99 99 99
99 99 2 1 2 99 99 99 99 99
99 99 3 2 3 99 99 99 99 99
99 99 99 99 6 99 99 99 99 99
I think that I probably donβt miss the push command somewhere. Any ideas would be highly appreciated.