tengo un pequeño problema en JS-Code y agradecería su ayuda Así que tengo una matriz como esta:
let topMap= [ '................**********........................', '...............*..........*.......................', '..........*****............*........*.............', '.........*.................*.......*.*....*****...', ]
Ahora puedo llenar una línea en este mapa con el carácter '*'. Dividí esta matriz en una cadena, establecí un carácter en la posición y transfiero de nuevo a la matriz.
const getCharFromArrayPosition = (x, y) => topMap[x][y] const replaceChar = (x,y) => { topMap= topMap.map(x => x.split('')) topMap[x][y] = char topMap = topMap.map(x => x.join('')) } const floodFill = (x,y) => { if(getCharFromArrayPosition(x,y) !== char){ replaceChar(x,y) floodFill(x,y+1) } return topMap }
Entonces, si console.log(floodFill(0,0)
obtengo esto
'**************************........................', '...............*..........*.......................', '..........*****............*........*.............', '.........*.................*.......*.*....*****...',
Estoy llenando la posición y y está bien pero, ¿cómo puedo llenar la posición x también con recursividad? O en otras palabras, ¿cómo pasar de un carácter a otro? gracias
En este momento, su recursividad solo va en una sola dirección: hacia la derecha.
floodFill(x, y + 1)
Recurse en todas las direcciones en su lugar. También deberá realizar un seguimiento de los índices visitados para evitar una repetición interminable. También puede ser más fácil trabajar con una matriz de matrices que con una matriz de cadenas.
const topMap = [ '................**********........................', '...............*..........*.......................', '..........*****............*........*.............', '.........*.................*.......*.*....*****...', ].map(str => [...str]); const visited = new Set(); const floodFill = (y, x) => { const key = y + '_' + x; if (visited.has(key) || topMap[y]?.[x] === undefined || topMap[y][x] !== '.') { return; } visited.add(key); topMap[y][x] = '*'; floodFill(y, x + 1); floodFill(y, x - 1); floodFill(y + 1, x); floodFill(y - 1, x); } floodFill(0, 0); console.log(topMap.map(subarr => subarr.join('')));