✔️ C# - Simple to understand using DFS, With Comments
Thumbs up if you find this helpful \uD83D\uDC4D\n\n\npublic class Solution {\n    public bool Exist(char[][] board, string word) {\n        \n        // Create 
**Thumbs up if you find this helpful** \uD83D\uDC4D\n\n```\npublic class Solution {\n    public bool Exist(char[][] board, string word) {\n        \n        // Create a \'visitied\' node matrix to keep track of the\n        // items we\'ve already seen\n        var rowsVisited = new bool[board.Length][];\n        for (int rowIndex = 0; rowIndex < board.Length; ++rowIndex) {\n            rowsVisited[rowIndex] = new bool[board[rowIndex].Length];\n        }\n        \n        // Start at the root node and explore as far as possible along each branch\n        for (int rowIndex = 0; rowIndex < board.Length; ++rowIndex) {\n            for (int colIndex = 0; colIndex < board[rowIndex].Length; ++colIndex) {\n                if (DFS(board, rowIndex, colIndex, 0, word, rowsVisited)) {\n                    return true;                    \n                }\n            }\n        }\n        return false;\n    }\n    \n    bool DFS(char[][] board, int row, int col, int searchIndex, string word, bool[][] rowsVisited) {\n        // Make sure the search paramaters are in bounds\n        if (searchIndex >= word.Length) {\n            return true;            \n        }\n        if (row < 0 || row >= board.Length || col < 0 || col >= board[row].Length) {\n            return false;            \n        }       \n        if (rowsVisited[row][col]) {\n            return false;            \n        } \n        if (board[row][col] != word[searchIndex]) {\n            return false;            \n        }        \n        \n        // Mark that this row has been visited\n        rowsVisited[row][col] = true;\n        \n        var searchResult = \n            // Search left\n            DFS(board, row, col - 1, searchIndex + 1, word, rowsVisited) ||\n            \n            // Search right\n            DFS(board, row, col + 1, searchIndex + 1, word, rowsVisited) ||\n            \n            // Search top\n            DFS(board, row - 1, col, searchIndex + 1, word, rowsVisited) ||\n            \n            // Search bottom\n            DFS(board, row + 1, col, searchIndex + 1, word, rowsVisited);\n        \n        // Unmark that this row has been visited\n        rowsVisited[row][col] = false;\n        \n        return searchResult;\n    }\n}\n```
['Depth-First Search']