maze in c++
i have written this code ..if i use for loop it writes all zeros to 2 and if i use while then it dont display result i am lost ...
Code:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
//----------------------------------------------------Print maze
void fnPrintMaze(int m,int n,int**a)
{
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
{
cout<<a[i][j];
cout<<" ";
}
cout<<endl;
}
}
//----------------------------------------------------Find Path
void fnFindPath(int m,int n, int **a)
{
int i=0;
int j=0;
//if(i==0 && j==0)
a[0][0]=2;
do{
if((i>=0 && j+1>=0 && i<=m-1 && j+1<=n-1 )&& a[i][j+1]==0)//right
{j++;
a[i][j]=2;
}
else if((i+1>=0 && j>=0 && i+1<=m-1 && j<=n-1) && a[i+1][j]==0)//down
{i++;
a[i][j]=2;
}
else if((i>=0 && j-1>=0 && i<=m-1 && j-1<=n-1) && a[i][j-1]==0) //left
{
j--;
a[i][i]=2;
}
else if((i-1>=0 && j>=0 && i-1<=m-1 && j<n-1) && a[i-1][j]==0) //up
{
i--;
a[i][j]=2;
}
else
{
if(i>=0 && j+1>0 && i<=m-1 &&j+1<=n-1 && a[i][j+1]==2)
{
a[i][j]=3;
j++;
}
else if(i+1>0 && j>=0 && i+1<=m-1 &&j<=n-1 && a[i+1][j]==2)
{
a[i][j]=3;
i++;
}
else if(i>=0 && j-1>=0 && i<=m-1 &&j-1<=n-1 && a[i][j-1]==2)
{
a[i][i]=3;
j--;
}
else if(i-1>=0 && j>=0 && i-1<=m-1 &&j<n-1 && a[i-1][j]==2)
{
a[i][j]=3;
i--;
}
}
}while( !( i==m-1 && j==n-1));
}
int main(int argc, char *argv[])
{
int m, n;
int **maze;
fstream fin("maze.txt", ios::in);
fin>>m;
fin>>n;
maze= new int*[m]; //defining rows
for (int i=0; i<=m-1; i++)
maze[i]=new int[n]; //defining columns
for (int i=0; i<=m-1; i++) //reading values from txt and putting in matrix
for (int j=0; j<=n-1; j++)
fin>>maze[i][j];
fnPrintMaze(m,n,maze);
//for (int i=0; i<=m-1; i++)
// for (int j=0; j<=n-1; j++)
fnFindPath( m,n, maze);
fnPrintMaze(m,n,maze);
system("PAUSE");
return EXIT_SUCCESS;
}
|