Você está na página 1de 2

#include <iostream>

#include <queue>
#include <stack>
void backtracking(char m[][7], int n, int i, int j);
void printM(char m[][7],int n);
void wait ( int seconds );
void bfs(char m[][7], int n);
void dfs(char m[][7], int n);
using namespace std;
int main (int argc, const char * argv[])
{ char m[7][7] =
{
{'#','#','#','#','#','#','#'},
{' ','#',' ',' ','T','#',' '},
{' ','#',' ','#',' ','#',' '},
{' ','#',' ','#',' ','#',' '},
{' ','#',' ',' ',' ',' ',' '},
{' ','#',' ','#',' ','#',' '},
{' ',' ',' ','#','#','#',' '}
};
cout<<"ejecutando..."<<endl;
//backtracking(m, 7, 0, 0);
bfs(m,7);
//dfs(m,7);
return 0;
}
void backtracking(char m[][7], int n, int i, int j)
{ system("cls");
printM(m, n);
wait(1);
if(m[i][j] == 'T' )
{
cout << "Encontr el tesoro en: "<<i<<" - "<<j<<endl;
return;
}
m[i][j] = 'X';
if(i>0 && (m[i-1][j] == ' ' || m[i-1][j] == 'T'))
backtracking(m, n, i-1, j);
if(i<n-1 && (m[i+1][j] == ' ' || m[i+1][j] == 'T'))
backtracking(m, n, i+1, j);
if(j>0 && (m[i][j-1] == ' ' || m[i][j-1] == 'T'))
backtracking(m, n, i, j-1);
if(j<n-1 && (m[i][j+1] == ' ' || m[i][j+1] == 'T'))
backtracking(m, n, i, j+1);
m[i][j] = ' ';
system("cls");
printM(m, n);
wait(1);
return;
}
struct camino
{ int i;
int j;
};
void bfs(char m[][7], int n)
{ queue<camino> cola;
camino a;
a.i = 0;
a.j = 0;
cola.push(a);
while(!cola.empty())
{
camino b = cola.front();
cola.pop();
int i = b.i;
int j = b.j;
if(m[i][j] == 'T')
{
cout<<"Encontr el tesoro en "<<i<<" - "<<j<<endl;
return;
}
m[i][j] = 'X';
if(i>0 && (m[i-1][j] == ' ' || m[i-1][j] == 'T'))
{
camino t;
t.i = i-1;
t.j = j;
cola.push(t);
}
if(i<n-1 && (m[i+1][j] == ' ' || m[i+1][j] == 'T'))
{
camino t;
t.i = i+1;
t.j = j;
cola.push(t);
}
if(j>0 && (m[i][j-1] == ' ' || m[i][j-1] == 'T'))
{

camino t;
t.i = i;
t.j = j-1;
cola.push(t);
}
if(j<n-1 && (m[i][j+1] == ' ' || m[i][j+1] == 'T'))
{
camino t;
t.i = i;
t.j = j+1;
cola.push(t);
}
system("cls");
printM(m, n);
wait(1);
}
cout<<"No encontr el tesoro :("<<endl;
}
void dfs(char m[][7], int n)
{
stack<camino> cola;
camino a;
a.i = 0;
a.j = 0;
cola.push(a);
while(!cola.empty())
{ camino b = cola.top();
cola.pop();
int i = b.i;
int j = b.j;
if(m[i][j] == 'T')
{
cout<<"Encontr el tesoro en "<<i<<" - "<<j<<endl;
return;
}
m[i][j] = 'X';
if(i>0 && (m[i-1][j] == ' ' || m[i-1][j] == 'T'))
{
camino t;
t.i = i-1;
t.j = j;
cola.push(t);
}
if(i<n-1 && (m[i+1][j] == ' ' || m[i+1][j] == 'T'))
{
camino t;
t.i = i+1;
t.j = j;
cola.push(t);
}
if(j>0 && (m[i][j-1] == ' ' || m[i][j-1] == 'T'))
{
camino t;
t.i = i;
t.j = j-1;
cola.push(t);
}
if(j<n-1 && (m[i][j+1] == ' ' || m[i][j+1] == 'T'))
{
camino t;
t.i = i;
t.j = j+1;
cola.push(t);
}
system("cls");
printM(m, n);
wait(1);
}
cout<<"No encontr el tesoro :("<<endl; }
void printM(char m[][7],int n)
{
for(int i = 0; i<n;i++)
{
for(int j = 0; j<n; j++)
{ cout<<"|"<<m[i][j]<<"|"; }
cout <<endl;
}
cout<<endl;
}
void wait ( int seconds )
{ clock_t endwait;
endwait = clock () + seconds * (CLOCKS_PER_SEC/2) ;
while (clock() < endwait) {}
}

Você também pode gostar