删除网格中的连接单元

问题描述 投票:0回答:1

给出一个网格,我希望用户输入一个坐标并删除其旁边等于该坐标值的数字。它还应删除相同编号旁边的编号。例如

1 1 1 0

1 2 0 1

1 1 0 3

1 0 2 3

如果我输入0,0,则应删除所有'connected'。

---0

-2 0 1

--0 3

-0 2 3

这是我的代码。由于某种原因,它一次只能删除2个,并且无法正确搜索网格。我认为,根据我读过的维基百科文章,我一直在使用Floodfill。我也在这里搜索过,并尝试将类似问题的代码并入。

任何帮助将不胜感激。我很沮丧。

import random


def makegrid(m,n,k):
   grid = [[random.randint(0,(k-1)) for x in range(m)] for y in range(n)]
   for n in grid:
      row = ' '
      for sub in n:
          row += str(sub) + ' '
      print(row)
   return grid



def search_chain(grid, cordNum, x, y):
   try:
      if cordNum == grid[x][abs(y-1)]:
         remove_nubers(x,y,grid,'y-1')
      elif cordNum == grid[x][y+1]:
         remove_nubers(x,y,grid,'y+1')
      elif cordNum == grid[abs(x-1)][y]:
         remove_nubers(x,y,grid,'x-1')
      elif cordNum == grid[x+1][y]:
         remove_nubers(x,y,grid,'x+1')
      else:
         return grid
   except:
      return grid


def remove_nubers(x,y,grid,direc):
   try:
      if direc == 'y-1':
         grid[x][y] = ' '
         grid[x][abs(y-1)] = ' '
         search_chain(grid, x, abs(y-1))
      elif direc == 'y+1':
         grid[x][y] = ' '
         grid[x][abs(y+1)] = ' '
         search_chain(grid, x, abs(y+1))
      elif direc == 'x-1':
         grid[x][y] = ' '
         grid[abs(x-1)][y] = ' '
         search_chain(grid, abs(x-1), y)
      elif direc == 'x+1':
         grid[x][y] = ' '
         grid[abs(x+1)][y] = ' '
         search_chain(grid, abs(x+1), y)
      else:
         print('wrong direction provided')
   except:
      pass


def main_loop():
   m = int(input('m'))
   n = int(input('n'))
   k = int(input('k'))

   grid = makegrid(m,n,k)

   try:
      x,y = map(int, input('x,y').split(','))
   except:
      x = 'stop'
      print('wrong format')
   cordNum = grid[x][y]

   search_chain(grid, cordNum, x, y)
   for n in grid:
      row = ' '
      for sub in n:
         row += str(sub) + ' '
      print(row)
   while x != 'stop':
      try:
         x,y = map(int, input('x,y').split(','))
      except:
         x = 'stop'
         continue
      cordNum = grid[x][y]
      search_chain(grid, cordNum, x, y)
      for n in grid:
         row = ' '
         for sub in n:
            row += str(sub) + ' '
         print(row)

main_loop()
python grid
1个回答
0
投票
grid = [ [1, 1, 1, 0], [1, 2, 0, 1], [1, 1, 0, 3], [1, 0, 2, 3] ] def search_chain(grid, cordNum, x, y): grid[x][y] = ' ' for xoff in range(-1, 2): for yoff in range(-1, 2): if abs(xoff) + abs(yoff) == 1 and 0 <= x+xoff < len(grid) and 0 <= y+yoff < len(grid[0]) and grid[x+xoff][y+yoff] == cordNum: grid = search_chain(grid, cordNum, x+xoff, y+yoff) return grid print(search_chain(grid, 1, 0, 0))

也许您不得不稍微调整一下,其余代码没有变红

© www.soinside.com 2019 - 2024. All rights reserved.