给出一个网格,我希望用户输入一个坐标并删除其旁边等于该坐标值的数字。它还应删除相同编号旁边的编号。例如
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()
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))
也许您不得不稍微调整一下,其余代码没有变红