-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
75 lines (62 loc) · 1.98 KB
/
main.c
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "src/ed/labirinto.h"
#include "src/ed/algorithms.h"
void print_result(ResultData *result)
{
if (!result->sucesso)
{
printf("IMPOSSIVEL\n");
return;
}
for (int i = 0; i < result->tamanho_caminho; i++)
printf("%d %d\n", result->caminho[i].y, result->caminho[i].x);
printf("%.2lf\n", result->custo_caminho);
printf("%d\n", result->tamanho_caminho);
printf("%d\n", result->nos_expandidos);
}
void mostra_caminho(Labirinto *l, ResultData *result, Celula inicio, Celula fim)
{
if (result->sucesso)
{
for (int i = 0; i < result->tamanho_caminho; i++)
labirinto_atribuir(l, result->caminho[i].y, result->caminho[i].x, CAMINHO);
}
labirinto_atribuir(l, inicio.y, inicio.x, INICIO);
labirinto_atribuir(l, fim.y, fim.x, FIM);
labirinto_print(l);
}
int main()
{
char arquivo_labirinto[100];
char algoritmo[100];
Celula inicio, fim;
ResultData result;
Labirinto *lab;
scanf("%s", arquivo_labirinto);
scanf("%d %d", &inicio.y, &inicio.x);
scanf("%d %d", &fim.y, &fim.x);
scanf("\n%s", algoritmo);
lab = labirinto_carregar(arquivo_labirinto);
if (!strcmp(algoritmo, "BFS"))
result = breadth_first_search(lab, inicio, fim);
else if (!strcmp(algoritmo, "DFS"))
result = depth_first_search(lab, inicio, fim);
else if (!strcmp(algoritmo, "A*"))
result = a_star(lab, inicio, fim);
else if (!strcmp(algoritmo, "DUMMY"))
result = dummy_search(lab, inicio, fim);
else
{
printf("Algoritmo desconhecido: %s\n", algoritmo);
exit(1);
}
print_result(&result);
// descomente para visualizar informacoes de debug no labirinto
//mostra_caminho(lab, &result, inicio, fim);
labirinto_destruir(lab);
if (result.caminho != NULL)
free(result.caminho);
return 0;
}