Почему реализация алгоритмической проблемы c не работает? - PullRequest
0 голосов
/ 25 апреля 2020

Вопрос в том, чтобы найти количество островов. https://leetcode.com/problems/number-of-islands/

Решение 1:

class Solution:    
    def dfs(self, row, column, grid):
        if row < 0 or column < 0 or row>= len(grid) or column >= len(grid[0]):
            return 0
        if grid[row][column] == '0':
            return 0
        grid[row][column] = '0'                    
        self.dfs(row+1, column, grid)
        self.dfs(row-1, column, grid)
        self.dfs(row, column+1, grid)
        self.dfs(row, column-1, grid)
    def numIslands(self, grid: List[List[str]]) -> int:
        count = 0
        for row in range(len(grid)):
            for column in range(len(grid[0])):
                if grid[row][column] == '1':
                    self.dfs(row, column, grid)
                    count += 1

        return count

Решение 2 (не работает)

class Solution:
    def dfs(self, row, column, grid):
        if row < 0 or column < 0 or row>= len(grid) or column >= len(grid[0]):
            return 0
        if grid[row][column] == '0':
            return 0
        grid[row][column] = '0'                    
        for i in range(-1, 2):
            for j in range(-1, 2):
                if i!=0 or j!=0:
                    self.dfs(row+i, column+j, grid)

    def numIslands(self, grid: List[List[str]]) -> int:
        count = 0
        for row in range(len(grid)):
            for column in range(len(grid[0])):
                if grid[row][column] == '1':
                    self.dfs(row, column, grid)
                    count += 1
        return count

Может кто-нибудь объяснить, почему 2 не работает Я запускаю al oop, в котором каждое выражение дает рекурсивный вызов.

Но этот лог c работает в Java, почему? https://www.youtube.com/watch?v=R4Nh-EgWjyQ

1 Ответ

1 голос
/ 25 апреля 2020

Второй код также считает диагонали действительными. Вот почему он отличается от первого.

11000
11000
00100
00011

Оба кода действительны, но не отвечают на один и тот же вопрос. Приведенный выше ввод, первый вернет 1, а второй 3.

...