惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
U
Unit 42
A
About on SuperTechFans
Vercel News
Vercel News
B
Blog
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
D
Docker
V
Visual Studio Blog
博客园 - 叶小钗
The Cloudflare Blog
Jina AI
Jina AI
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Rat in a Maze | Backtracking
Jaspreet singh · 2026-06-19 · via DEV Community

Jaspreet singh

Day X - Rat in a Maze | Backtracking

Problem Statement

A rat starts at:

(0,0)

and wants to reach:

(n-1,n-1)

The rat can move:

D → Down
L → Left
R → Right
U → Up

Cells containing:

1 → Open
0 → Blocked

Return all possible paths.


Brute Force Intuition

From every cell:

Try all four directions

Keep moving until:

Destination reached

or

Invalid path

Without tracking visited cells, infinite loops can occur.


Moving Towards the Optimal Approach

For every cell:

Mark Visited
Explore All Directions
Unmark Visited

This prevents revisiting the same cell in the current path.


Pattern Recognition

Whenever you see:

  • Grid traversal
  • Find all paths
  • Obstacles present

Think:

Backtracking + DFS


Key Observation

From one cell:

D
L
R
U

Each move creates a new branch.

Only valid cells are explored.


Optimal Java Solution

class Solution {

    public ArrayList<String> ratInMaze(int[][] maze) {

        ArrayList<String> ans = new ArrayList<>();

        int n = maze.length;

        if (maze[0][0] == 0)
            return ans;

        boolean[][] visited = new boolean[n][n];

        solve(0, 0, maze, visited, "", ans);

        return ans;
    }

    private void solve(int row,
                       int col,
                       int[][] maze,
                       boolean[][] visited,
                       String path,
                       ArrayList<String> ans) {

        int n = maze.length;

        if (row == n - 1 && col == n - 1) {
            ans.add(path);
            return;
        }

        visited[row][col] = true;

        if (isSafe(row + 1, col, maze, visited))
            solve(row + 1, col, maze, visited, path + "D", ans);

        if (isSafe(row, col - 1, maze, visited))
            solve(row, col - 1, maze, visited, path + "L", ans);

        if (isSafe(row, col + 1, maze, visited))
            solve(row, col + 1, maze, visited, path + "R", ans);

        if (isSafe(row - 1, col, maze, visited))
            solve(row - 1, col, maze, visited, path + "U", ans);

        visited[row][col] = false;
    }

    private boolean isSafe(int row,
                           int col,
                           int[][] maze,
                           boolean[][] visited) {

        int n = maze.length;

        return row >= 0 &&
               col >= 0 &&
               row < n &&
               col < n &&
               maze[row][col] == 1 &&
               !visited[row][col];
    }
}


Dry Run

Input

1 0 0 0
1 1 0 1
1 1 0 0
0 1 1 1

Start:

(0,0)

Possible path:

Down
Down
Right
Down
Right
Right

Result:

DDRDRR


Why Backtracking Works?

At every cell:

Explore all valid directions

After exploring:

Undo visited mark

so other paths can reuse the cell.


Complexity Analysis

Metric Complexity
Time Complexity O(4^(N²))
Space Complexity O(N²)

Interview One-Liner

Perform DFS from the source cell, exploring all four directions while maintaining a visited matrix to avoid cycles.


Pattern Learned

Find All Paths
+
Grid
+
Obstacles

=> DFS + Backtracking

Similar Problems

  • Rat in a Maze
  • Word Search
  • Number of Islands
  • Flood Fill
  • Maze Problems
  • Path Finding

Memory Trick

Current Cell
      ↓
Try D L R U
      ↓
Valid ?
      ↓
Move
      ↓
Backtrack

Backtracking Cheat Sheet

Subsets
→ Pick / Not Pick

Combination Sum
→ Target Based

Palindrome Partitioning
→ Try Every Cut

Permutations
→ Try Every Unused Element

N Queens
→ Try Every Safe Position

Sudoku
→ Try Every Valid Digit

Graph Coloring
→ Try Every Valid Color

Rat In Maze
→ Try Every Valid Direction

These are the core Striver Backtracking patterns that appear repeatedly in interviews. 🚀