A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: Function create_function() is deprecated
Filename: geshi/geshi.php
Line Number: 4751
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876
A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by (output started at /home/Jenja/www/mcpaste.de/www/system/core/Exceptions.php:272)
Filename: view/raw.php
Line Number: 2
#include
#include
#include
/*
* In der Cell Strucktur werden Ergebnisse aus dem Algorithmus gespeichert
*/
struct Cell
{
bool bMarked; // Zeigt an, ob das Feld schon besucht wurde ( ture = besucht )
int nLastX; // Die X Koordinate des vorherigen Feldes ( -1 = kein vorheriges Feld )
int nLastY; // Die Y Koordinate des vorherigen Feldes
Cell(){
this->bMarked = false;
this->nLastX = -1;
this->nLastY = -1;
}
};
/*
* Die Coordinate Strucktur dient der
*/
struct Coordinate
{
int x, y;
};
// Uninteressant
bool operator<(const Coordinate c1, const Coordinate c2) {
return false;
}
// Uninteressant
bool operator==(const Coordinate c1, const Coordinate c2) {
return false;
}
/*
* In dieser Tabelle steht die Reihenfolge in der die Umliegenden
* Felder abgearbeitet werden sollen
*/
const int DirTable[8][2] = {
{ 0, -1}, // oben
{ 1, 0}, // rechts
{ 0, 1}, // unten
{ -1, 0}, // links
{ 1, -1}, // rechts-oben
{ 1, 1}, // rechts-unten
{ -1, 1}, // links-unten
{ -1, -1} };// links-oben
// Globale Variablen
int heigth; // Hoehe des Konfigurationsraums
int width; // Breite des Konfigurationsraums
BYTE **cspace; // cspace[i][j] gibt die "Farbe" des Konfigurationsraums an
// Die Farben selbst sind in der Funktion SaveAsBitmap als
// Palette definiert. z.B. 1 = Weiss, 2 = Rot, usw. ( siehe unten)
Cell **aCells; // In diesem 2D Feld werden die Ergebisse des Algorithmus abgelegt
// Funktionsprototypen:
bool LoadFromBitmap( char *szFile, BYTE ***array, int *width, int *heigth );
bool SaveAsBitmap( char *szFile, BYTE **array, int width, int heigth );
bool FindPath( int nStartX, int nStartY, int nGoalX, int nGoalY );
void ClearCells();
/*
* main
*/
int main()
{
int x, y;
// Laden des Konfigurationsraums
if( !LoadFromBitmap( "cspace.bmp", &cspace, &width, &heigth ) )
return -1;
// Zellenarray allokieren ( dynamisch auf dem Heap )
aCells = new Cell*[heigth];
for( y=0; y queue;
// Startzelle:
Coordinate c;
c.x = nStartX;
c.y = nStartY;
// Folgende Zeilen demonstrieren die Manipulation von Queues ( Warteschlange )
// Einfach auskommentieren und testen
/* printf("Queue leer ? : %d\n", queue.empty()); // Am Anfang ist die Queue leer
queue.push( c ); // Element in die Queue anstellen
printf("Queue leer ? : %d\n", queue.empty()); // Jetzt sollte die Queue nicht mehr leer sein
printf( "Elemente in Queue: %d\n", queue.size() ); // Anzahl Elemente in der Queue
Coordinate test = queue.front(); // front() gibt das forderste Element in der Queue zur�ck,
printf("x: %d, y: %d\n", test.x, test.y ); // jedoch wird da Element dadurch nicht entfernt!
queue.pop(); // Entfernt das erste Element aus der Queue
printf("Queue leer ? : %d\n", queue.empty()); // Nun sollte die Queue wieder leer sein
*/
// ToDo: Ihr Algorithmus
// ....
queue.push(c);
aCells[c.y][c.x].bMarked = true;
while( !queue.empty() ) // Solange bis keine Elemente mehr in der Queue sind
{
Coordinate currentCell = queue.front();
queue.pop();
if (currentCell.x == nGoalX && currentCell.y == nGoalY){
return true;
}
else{
for (unsigned int i = 0; i < 8; i++){
Coordinate newCell = currentCell;
newCell.x += DirTable[i][1]; // Offset auf die Base Adress rechnen, um zur umliegenden Zelle zu kommen
newCell.y += DirTable[i][0];
int nX = newCell.x;
int nY = newCell.y;
if ((nX < heigth && nY < width) && (nX && nY)){ // Die Zelle liegt noch im Konfigurationsraum
if (!aCells[nY][nX].bMarked){ // Wenn die Zelle noch nicht markiert ist
if (!cspace[nY][nX]){ // Und keine Kollision stattfindet...
aCells[nY][nX].bMarked = true; // aktuelle Zelle als vorg�nger setzten
aCells[nY][nX].nLastX = currentCell.x;
aCells[nY][nX].nLastY = currentCell.y;
queue.push(newCell);
}
}
}
}
}
}
return false; // Default Return
}
/*
* ClearCells()
* Setzt alle Zellen auf die Initialwerte zur�ck
*/
void ClearCells()
{
// Zellen zur�cksetzen
for( int y=0; y=0; y-- )
{
for( x=0; x=0; y-- )
{
for( int x=0; x
A PHP Error was encountered
Severity: 8192
Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior
Filename: database/DB_driver.php
Line Number: 1876