Golang

 

Introduction

A Maze Solver is a program designed to find a path through a maze from a given start point to the exit. This is a common problem in algorithm design and helps in understanding key concepts like backtracking and depth-first search (DFS). In this tutorial, we will build a maze solver using the Go programming language.

The objective is to implement a simple and efficient maze-solving algorithm in Go, demonstrating how to traverse through the maze grid, search for a path, and output the solution.

Code: Maze Solver in Go


package main

import (
	"fmt"
)

// Define the maze size and the maze structure
var maze = [][]int{
	{1, 0, 1, 1, 1},
	{1, 0, 1, 0, 1},
	{1, 1, 1, 0, 1},
	{0, 0, 0, 0, 1},
	{1, 1, 1, 0, 1},
}

// Define the movement directions (right, down, left, up)
var directions = [][2]int{
	{0, 1},  // right
	{1, 0},  // down
	{0, -1}, // left
	{-1, 0}, // up
}

// Function to solve the maze using backtracking
func solveMaze(x, y int, path []string) bool {
	// Check if the current position is out of bounds or a wall
	if x < 0 || x >= len(maze) || y < 0 || y >= len(maze[0]) || maze[x][y] == 0 {
		return false
	}
	
	// If we have reached the bottom-right corner, return true (solution found)
	if x == len(maze)-1 && y == len(maze[0])-1 {
		path = append(path, fmt.Sprintf("(%d, %d)", x, y))
		fmt.Println("Solution path:", path)
		return true
	}

	// Mark the current cell as visited by setting it to 0 (wall)
	maze[x][y] = 0

	// Explore each direction
	for _, direction := range directions {
		newX := x + direction[0]
		newY := y + direction[1]
		newPath := append([]string(nil), path...) // Create a new slice for the path

		// If the direction leads to a solution, return true
		if solveMaze(newX, newY, append(newPath, fmt.Sprintf("(%d, %d)", x, y))) {
			return true
		}
	}

	// Unmark the current cell as visited (backtrack)
	maze[x][y] = 1
	return false
}

func main() {
	// Starting point (top-left corner)
	startX, startY := 0, 0
	var path []string
	
	// Call the solveMaze function and output result
	if !solveMaze(startX, startY, path) {
		fmt.Println("No solution exists.")
	}
}
            

Program Structure and Explanation

The program begins by defining a 2D array to represent the maze. In this maze, ‘1’ represents a valid path, and ‘0’ represents a wall. The goal is to start at the top-left corner (0,0) and find a path to the bottom-right corner (4,4) using a backtracking algorithm.

The `solveMaze` function performs the actual maze-solving logic. It starts from the current position, checks if it can move in any direction (right, down, left, up), and recursively explores the next positions. If the program reaches the exit, it prints the path taken to get there. The function uses backtracking to undo previous moves if a path does not lead to the solution.

To run the program, make sure you have Go installed on your machine. You can download Go from the official website: Download Go.

Steps to Run the Program:

  1. Install Go from the official website.
  2. Copy the code into a text file with a ‘.go’ extension, such as ‘maze_solver.go’.
  3. Open a terminal or command prompt and navigate to the folder where the file is saved.
  4. Run the program by typing go run maze_solver.go.
  5. If a solution exists, the program will print the solution path. Otherwise, it will display “No solution exists.”
© 2025 Learn Programming. All rights reserved.

 

By Aditya Bhuyan

I work as a cloud specialist. In addition to being an architect and SRE specialist, I work as a cloud engineer and developer. I have assisted my clients in converting their antiquated programmes into contemporary microservices that operate on various cloud computing platforms such as AWS, GCP, Azure, or VMware Tanzu, as well as orchestration systems such as Docker Swarm or Kubernetes. For over twenty years, I have been employed in the IT sector as a Java developer, J2EE architect, scrum master, and instructor. I write about Cloud Native and Cloud often. Bangalore, India is where my family and I call home. I maintain my physical and mental fitness by doing a lot of yoga and meditation.

Leave a Reply

Your email address will not be published. Required fields are marked *

error

Enjoy this blog? Please spread the word :)