Well..i didn't want to drive anyone off by pasting all the code. However I think that's what I have to do now. My program solves a maze... or attempts to...using standard library template deques.
This first part is fine.
Code:
.
int main()
{
Move curr_move;
Curr_pos start;
char Maze[40][40];
char filename[12];
int rows = 0;
int columns = 0;
MOVEDEQUE A;
bool blocked;
curr_move.move_number = 0;
cout<< "Please enter the name of the maze file you want to read, or (q) to quit.\n" << endl;
cout<< "(a) maze1.txt\n(b) maze2.txt\n(c) maze3.txt\n"<< endl;
cin.getline (filename, 10);
if (filename[0] == 'q')
{
return 0;
}
Read_file (Maze, &columns, &rows, start, filename);
printf("%d,%d \n", start.row, start.col);
curr_move.maze_col = start.col;
curr_move.maze_row = start.row;
Print_m_array (Maze, rows, columns);
.
I don't get any errors , however when I print out the 'solved maze' I just get back what I read in...which is unsolved. Debugging doesn't help either...when it get's to that part...it just exits without my permission.
Code:
.
while( Maze[curr_move.maze_row][curr_move.maze_col] != 'X' && !blocked)
{
if (!legal_move(Maze, curr_move))
{
curr_move.move_number ++;
if (curr_move.move_number > 3)
{
curr_move.move_number = 0;
///(advance_peg(move)) move back in the deque to the previous move;
A.pop_back();
}
}
if (legal_move == true)
{
A.push_back(curr_move);
curr_move.move_number = 0;
advance_maze(curr_move, A, Maze);
}
/*Update the move number . Place * after a valid move in the maze
curr_move.move_number ++;
Maze[curr_move.maze_row][curr_move.maze_col] = '*';
curr_move.maze_row = curr_move.maze_row ++;
curr_move.maze_col = curr_move.maze_col ++;*/
if (A.empty())
{
blocked = true;
}
if (blocked == true)
{
A.pop_back();
/* reset the position ie set the current position to the previous value,
/** what I just poped back.*/
}
else
{
A.pop_back();
Print_m_array (Maze, rows, columns);
}
}
return 0;
}
.
This is what my advance_maze function and my legal fuction look like......
Code:
.
bool legal_move(char Maze[40][40], Move &move)
{
int n;
n = move.move_number;
if (Maze[move.maze_row + position[n].move_left]
[move.maze_col + position[n].move_down] == 0
&&
Maze[move.maze_row + position[n].move_right]
[move.maze_col + position[n].move_up] == 0)
return true;
else
return false;
}
void advance_maze( Move &move, MOVEDEQUE &M, char m_array[][40])
{
m_array[move.maze_row][move.maze_col] = '*';
move.maze_row = move.maze_row + 1;
move.maze_col = move.maze_col + 1;
}
.
Why am I not getting a solved maze ? Am I using the wrong algorithm? or I'm I still being silly? Please tell me.
thanks