Maze 2D: 0 = đường đi, 1 = tường. Tìm đường từ (0,0) đến (n-1,n-1) dùng backtracking.


Ví dụ
Input maze[5][5]:
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 solution:
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
Thuật toán Backtracking
solvemaze(r,c):
NẾU (r,c) LÀ ĐÍCH -> ĐÁNH DẤU, TRẢ VỀ TRUE
NẾU Ô HỢP LỆ (trong bounds, không tường, chưa đi)
ĐÁNH DẤU ĐÃ ĐI
THỬ XUỐNG, PHẢI, LÊN, TRÁI (đệ quy)
NẾU THÀNH CÔNG -> TRẢ VỀ TRUE
BỎ ĐÁNH DẤU (BACKTRACK), TRẢ VỀ FALSE
TRẢ VỀ FALSE
Chương trình C++ ví dụ
#include <iostream>
using namespace std;
#define SIZE 5
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}};
int solution[SIZE][SIZE];
void printsolution() {
for(int i=0;i=0&&c>=0&&r