Program C untuk tikus dalam maze - backtracking-2
Tikus dalam labirin juga merupakan masalah biasa menggunakan pengunduran. I
Maze ialah matriks dua dimensi di mana beberapa sel disekat. Salah satu sel ialah sel sumber dan kita perlu bermula dari situ. Satu lagi ialah destinasi, tempat yang mesti kita sampai. Kita perlu mencari laluan dari sumber ke destinasi tanpa memasuki mana-mana sel yang disekat. Gambar maze yang belum diselesaikan ditunjukkan di bawah.
Ini adalah penyelesaian untuknya.
Untuk menyelesaikan teka-teki ini, kita mula-mula bermula dari unit sumber dan bergerak ke arah di mana laluan tidak disekat. Jika jalan yang dilalui membawa kita ke destinasi kita, teka-teki telah diselesaikan. Jika tidak, kita akan kembali dan mengubah arah jalan yang kita lalui. Kami akan melaksanakan logik yang sama dalam kod juga.
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
Penjelasan
Pertama, kita akan buat matriks untuk mewakili maze, elemen matriks akan menjadi 0 atau 1. 1 bermaksud sel tersumbat dan 0 bermaksud sel yang boleh kita gerakkan. Matriks untuk maze yang ditunjukkan di atas adalah seperti berikut:
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
Sekarang, kami akan membuat satu lagi matriks dengan dimensi yang sama untuk menyimpan penyelesaian. Elemennya juga akan menjadi 0 atau 1. 1 akan mewakili sel dalam laluan kita dan sel yang tinggal ialah 0. Matriks yang mewakili penyelesaian ialah:
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
Jadi, kami kini mempunyai matriks kami. Seterusnya, kita akan mencari laluan dari sel permulaan ke sel sasaran, langkah yang akan kita ambil adalah seperti berikut:
Semak sel semasa, jika ia adalah sel sasaran, teka-teki diselesaikan.
Jika tidak, cuba bergerak ke bawah dan lihat jika anda boleh bergerak ke sel seterusnya (untuk berpindah ke sel, ia mesti kosong dan tidak berada di laluan).
Jika anda boleh berpindah ke sel seterusnya, teruskan bergerak di sepanjang laluan ke sel bawah seterusnya.
Jika tidak, cuba bergerak ke kanan. Jika bahagian kanan disekat atau diduduki, bergerak ke atas.
Begitu juga, jika bergerak ke atas tidak boleh, kita hanya akan bergerak ke sel kiri.
Jika pergerakan tidak boleh dilakukan dalam mana-mana daripada empat arah (bawah, kanan, atas atau kiri), hanya berundur dan tukar laluan semasa (backtracking).
Jadi, untuk meringkaskan, kami cuba beralih dari sel semasa ke sel lain (bawah, kanan, atas dan kiri) dan jika tiada pergerakan boleh, kembali dan tukar arah laluan ke grid sel yang lain.
printsolution → Fungsi ini hanya mencetak matriks penyelesaian.
solvemaze → Ini ialah fungsi yang sebenarnya melaksanakan algoritma penjejakan ke belakang. Mula-mula, kita semak sama ada sel kita ialah sel sasaran, jika ya (r==SAIZ-1) dan (c==SAIZ-1). Jika ia adalah sel sasaran, teka-teki kami telah diselesaikan. Jika tidak, maka kami menyemak sama ada ia adalah sel mudah alih yang sah. Sel yang sah mesti berada dalam matriks, iaitu indeks mestilah antara 0 dan SIZE-1, r>=0 && c>=0 && r Atas ialah kandungan terperinci Program C untuk tikus dalam maze - backtracking-2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!Contoh
#include <iostream>
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<SIZE;i++) {
for(j=0;j<SIZE;j++) {
printf("%d\t",solution[i][j]);
}
printf("</p><p></p><p>");
}
}
//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<SIZE && c<SIZE && solution[r][c] == 0 && maze[r][c] == 0){
//if safe to visit then visit the cell
solution[r][c] = 1;
//going down
if(solvemaze(r+1, c))
return 1;
//going right
if(solvemaze(r, c+1))
return 1;
//going up
if(solvemaze(r-1, c))
return 1;
//going left
if(solvemaze(r, c-1))
return 1;
//backtracking
solution[r][c] = 0;
return 0;
}
return 0;
}
int main() {
//making all elements of the solution matrix 0
int i,j;
for(i=0; i<SIZE; i++) {
for(j=0; j<SIZE; j++) {
solution[i][j] = 0;
}
}
if (solvemaze(0,0))
printsolution();
else
printf("No solution</p><p>");
return 0;
}

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Artikel ini menerangkan Perpustakaan Templat St Standard (STL), yang memberi tumpuan kepada komponen terasnya: bekas, iterator, algoritma, dan functors. Ia memperincikan bagaimana ini berinteraksi untuk membolehkan pengaturcaraan generik, meningkatkan kecekapan kod dan kebolehbacaan t

Artikel ini memperincikan penggunaan algoritma STL yang cekap dalam c. Ia menekankan pilihan struktur data (vektor vs senarai), analisis kerumitan algoritma (mis., Std :: Sort vs Std :: partial_sort), penggunaan iterator, dan pelaksanaan selari. Perangkap biasa seperti

Struktur Data Bahasa C: Perwakilan data pokok dan graf adalah struktur data hierarki yang terdiri daripada nod. Setiap nod mengandungi elemen data dan penunjuk kepada nod anaknya. Pokok binari adalah jenis pokok khas. Setiap nod mempunyai paling banyak dua nod kanak -kanak. Data mewakili structtreenode {intData; structtreenode*left; structtreenode*right;}; Operasi mewujudkan pokok traversal pokok (predecision, in-order, dan kemudian pesanan) Node Node Carian Pusat Node Node adalah koleksi struktur data, di mana unsur-unsur adalah simpul, dan mereka boleh dihubungkan bersama melalui tepi dengan data yang betul atau tidak jelas yang mewakili jiran.

Artikel membincangkan penggunaan rujukan RValue yang berkesan dalam C untuk bergerak semantik, pemajuan sempurna, dan pengurusan sumber, menonjolkan amalan terbaik dan penambahbaikan prestasi. (159 aksara)

C 20 julat meningkatkan manipulasi data dengan ekspresi, komposiliti, dan kecekapan. Mereka memudahkan transformasi kompleks dan mengintegrasikan ke dalam kod sedia ada untuk prestasi dan kebolehkerjaan yang lebih baik.

Artikel ini butiran pengendalian pengecualian yang berkesan di C, meliputi percubaan, menangkap, dan membuang mekanik. Ia menekankan amalan terbaik seperti RAII, mengelakkan blok tangkapan yang tidak perlu, dan pengecualian pembalakan untuk kod yang mantap. Artikel ini juga menangani perf

Artikel ini membincangkan menggunakan semantik Move dalam C untuk meningkatkan prestasi dengan mengelakkan penyalinan yang tidak perlu. Ia meliputi pelaksanaan pembina bergerak dan pengendali tugasan, menggunakan STD :: bergerak, dan mengenal pasti senario utama dan perangkap untuk Appl yang berkesan

Artikel ini membincangkan penghantaran dinamik dalam C, kos prestasinya, dan strategi pengoptimuman. Ia menyoroti senario di mana penghantaran dinamik memberi kesan kepada prestasi dan membandingkannya dengan penghantaran statik, menekankan perdagangan antara prestasi dan
