C-Programm für Mäuse im Labyrinth – Backtracking-2

WBOY
Freigeben: 2023-09-11 14:25:21
nach vorne
549 Leute haben es durchsucht

Die Ratte im Labyrinth ist auch ein häufiges Problem beim Backtracking. I

Ein Labyrinth ist eine zweidimensionale Matrix, in der einige Zellen blockiert sind. Eine der Zellen ist die Quellzelle und wir müssen von dort aus beginnen. Eine weitere davon ist das Ziel, der Ort, an den wir gelangen müssen. Wir müssen einen Weg von der Quelle zum Ziel finden, ohne blockierte Zellen zu betreten. Unten sehen Sie ein Bild des ungelösten Labyrinths.

迷宫中老鼠的C程序 - 回溯法-2

Das ist die Lösung dafür.

迷宫中老鼠的C程序 - 回溯法-2

Um dieses Rätsel zu lösen, beginnen wir zunächst bei der Quelleinheit und bewegen uns in die Richtung, in der der Weg nicht blockiert ist. Führt uns der eingeschlagene Weg zum Ziel, ist das Rätsel gelöst. Andernfalls werden wir zurückkommen und die Richtung des eingeschlagenen Weges ändern. Wir werden die gleiche Logik auch im Code implementieren.

Input: maze[][] = { {0,1,0,1,1}, {0,0,0,0,0}, {1,0,1,0,1}, {0,0,1,0,0}, {1,0,0,1,0}} Output: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1
Nach dem Login kopieren

Erklärung

Zuerst erstellen wir eine Matrix zur Darstellung des Labyrinths. Die Elemente der Matrix sind 0 oder 1. 1 bedeutet blockierte Zellen und 0 bedeutet Zellen, die wir verschieben können. Die Matrix für das oben gezeigte Labyrinth lautet wie folgt:

0 1 0 1 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0
Nach dem Login kopieren

Jetzt erstellen wir eine weitere Matrix mit denselben Abmessungen, um die Lösung zu speichern. Seine Elemente werden ebenfalls 0 oder 1 sein. 1 stellt die Zellen in unserem Pfad dar und die übrigen Zellen werden 0 sein. Die Matrix, die die Lösung darstellt, ist:

1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1
Nach dem Login kopieren

So, jetzt haben wir unsere Matrix. Als nächstes werden wir den Pfad von der Startzelle zur Zielzelle finden. Die Schritte, die wir unternehmen werden, sind wie folgt:

  • Überprüfen Sie die aktuelle Zelle. Wenn es sich um die Zielzelle handelt, ist das Rätsel gelöst.

  • Wenn nicht, versuchen Sie, nach unten zu gehen und prüfen Sie, ob Sie zur nächsten Zelle wechseln können (um zu einer Zelle zu wechseln, muss diese leer sein und darf sich nicht im Pfad befinden).

  • Wenn Sie zur nächsten Zelle wechseln können, bewegen Sie sich weiter auf dem Pfad zur nächstniedrigeren Zelle.

  • Wenn nicht, versuchen Sie, nach rechts zu gehen. Wenn die rechte Seite blockiert oder besetzt ist, bewegen Sie sich nach oben.

  • Wenn ein Aufsteigen nicht möglich ist, bewegen wir uns ebenfalls einfach in die linke Zelle.

  • Wenn eine Bewegung in eine der vier Richtungen (unten, rechts, oben oder links) nicht möglich ist, gehen Sie einfach zurück und ändern Sie den aktuellen Pfad (Backtracking).

Um es zusammenzufassen: Wir versuchen, von der aktuellen Zelle zu anderen Zellen zu wechseln (nach unten, rechts, oben und links). Wenn keine Bewegung möglich ist, gehen wir zurück und ändern die Richtung des Pfads zu einem anderen Zellengitter.

printsolution → Diese Funktion druckt nur die Lösungsmatrix.

solvemaze → Dies ist die Funktion, die den Backtracking-Algorithmus tatsächlich implementiert. Zuerst prüfen wir, ob unsere Zelle die Zielzelle ist, wenn ja (r==SIZE-1) und (c==SIZE-1). Wenn es die Zielzelle ist, ist unser Rätsel gelöst. Wenn nicht, prüfen wir, ob es sich um eine gültige Mobilfunkzelle handelt. In der Matrix muss sich eine gültige Zelle befinden, d. h. der Index muss zwischen 0 und SIZE-1 liegen, r>=0 && c>=0 && r

Beispiel

#include  using namespace std; #define SIZE 5 //the maze problem int maze[SIZE][SIZE] = { {0,1,0,1,1}, {0,0,0,0,0}, {1,0,1,0,1}, {0,0,1,0,0}, {1,0,0,1,0} }; //matrix to store the solution int solution[SIZE][SIZE]; //function to print the solution matrix void printsolution() { int i,j; for(i=0;i

"); } } //function to solve the maze //using backtracking int solvemaze(int r, int c) { //if destination is reached, maze is solved //destination is the last cell(maze[SIZE-1][SIZE-1]) if((r==SIZE-1) && (c==SIZE-1) { solution[r][c] = 1; return 1; } //checking if we can visit in this cell or not //the indices of the cell must be in (0,SIZE-1) //and solution[r][c] == 0 is making sure that the cell is not already visited //maze[r][c] == 0 is making sure that the cell is not blocked if(r>=0 && c>=0 && r

"); return 0; }

Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonC-Programm für Mäuse im Labyrinth – Backtracking-2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!