-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSearchAlgorithm.cpp
82 lines (71 loc) · 2.31 KB
/
SearchAlgorithm.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//
// Created by viniman on 22/06/19.
//
#include "SearchAlgorithm.h"
char SearchAlgorithm::oppositeWay(char c)
{
switch (c)
{
case 'L':
return 'R';
case 'R':
return 'L';
case 'B':
return 'T';
case 'T':
return 'B';
default:
return 'N';
}
}
char SearchAlgorithm::nextOperation(Node* searchPointer)
{
if(searchPointer->getDirectionVisited() == 'N') // nao visitou ninguem, entao testa todos
{
if(searchPointer->getRight() && oppositeWay(searchPointer->getVisitedBy()) != 'R')
return 'R';
if(searchPointer->getBotton()&& oppositeWay(searchPointer->getVisitedBy()) != 'B')
return 'B';
if(searchPointer->getLeft()&& oppositeWay(searchPointer->getVisitedBy()) != 'L')
return 'L';
if(searchPointer->getTop() && oppositeWay(searchPointer->getVisitedBy()) != 'T')
return 'T';
}
if(searchPointer->getDirectionVisited()== 'R') //ja visitou R, entao visita o que sobrou
{
if(searchPointer->getBotton() && oppositeWay(searchPointer->getVisitedBy()) != 'B')
return 'B';
if(searchPointer->getLeft() && oppositeWay(searchPointer->getVisitedBy()) != 'L')
return 'L';
if(searchPointer->getTop()&& oppositeWay(searchPointer->getVisitedBy()) != 'T')
return 'T';
}
if(searchPointer->getDirectionVisited()== 'B')
{
if(searchPointer->getLeft()&& oppositeWay(searchPointer->getVisitedBy()) != 'L')
return 'L';
if(searchPointer->getTop()&& oppositeWay(searchPointer->getVisitedBy()) != 'T')
return 'T';
}
if(searchPointer->getDirectionVisited()== 'L')
{
if(searchPointer->getTop()&& oppositeWay(searchPointer->getVisitedBy()) != 'T')
return 'T';
}
return 'N';
}
void SearchAlgorithm::cleanMazeForSearch(Maze& maze)
{
for(auto& iterator : maze.getRooms())
{
iterator->setVisitedBy('N');
iterator->setDirectionVisited('N');
iterator->setNonVisited();
iterator->setdistanceOrigin(0);
iterator->setsumHeurDist(0);
iterator->setFather(NULL);
iterator->removerNodeLista();
iterator->setProfundidade(0);
iterator->zerarSucessores();
}
}