forked from LiLaVanRAW/Phoenix
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbreitenSuche.c
93 lines (81 loc) · 1.74 KB
/
breitenSuche.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//written by alex & steven
#include <stdio.h>
#include "breitenSuche.h"
/*****************************************************************************/
/******************** Ab hier erfolgt die Implementierung ********************/
/*****************************************************************************/
const int MAX = 70;
int n = 0;
char _FA[] = "xxFxFxxx..x..xF.x.x.Fx.x...xx.x..xxx..x..xx...x.xxx..x.xF..x..Fx..x..x";
int positionsKarte[70];
/****************************** Nur fuer Konsolenanzeige ******************************/
void display(char a)
{
int j;
for (j = 1; j < 71; j++)
{
if(a == 'c') //map display as character
{
printf("%c \t",_FA[j-1]);
}
else if(a == 'n') //map display as costs
{
printf("%d \t",_FA[j-1]);
}
if((j % 7)== 0)
{
printf("\n");
}
}
printf("\n\n\n");
}
/****************************** Nur fuer Konsolenanzeige ******************************/
void pushKnoten(int aktKnoten)
{
if(n < MAX)
{
positionsKarte[n] = aktKnoten;
n++;
}
}
int getKnoten()
{
if(n > 0)
{
n--;
return positionsKarte[n];
}
}
//Die BFS wandelt alle erreichbaren Punkte in seine Kosten ausgehend vom Startpunkt 64 oder 68 um
void breitensuche(int startPunkt)
{
int kosten = 0;
int aktKnoten = startPunkt;
pushKnoten(aktKnoten);
_FA[aktKnoten] = kosten;
do
{
kosten++;
aktKnoten = getKnoten();
if(_FA[aktKnoten-1] == '.')
{
pushKnoten(aktKnoten-1);
_FA[aktKnoten-1] = kosten;
}
if(_FA[aktKnoten-7] =='.')
{
pushKnoten(aktKnoten-7);
_FA[aktKnoten-7] = kosten;
}
if(_FA[aktKnoten+1] == '.')
{
pushKnoten(aktKnoten+1);
_FA[aktKnoten+1] = kosten;
}
if(_FA[aktKnoten+7] == '.')
{
pushKnoten(aktKnoten+7);
_FA[aktKnoten+7] = kosten;
}
}while(aktKnoten != 0);
}