1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
function sudoku(input) { const inputArr = input.split('\n'); const [n, m] = inputArr.shift().split(' '); const word = inputArr.shift().trim(); const board = inputArr.map(item => item.split('')); let output = 'NO';
const backtrack = (board, i, j, step = 0, result = '') => { if (j === +m) { if (step !== 0) { return false; } return backtrack(board, i+1, 0, 0, ''); } if (i === +n) { return true; } if (board[i][j] !== word[step]) { if (result !== '' || step !== 0) { return false; } return backtrack(board, i, j + 1, 0, ''); } else { if (step === 0) { result = (i+1) + ' ' + (j+1); } if (step === word.length - 1) { if (result) { output = result; } return true; } step++; if (i - 1 >= 0 && board[i - 1][j] === word[step]) { backtrack(board, i-1, j, step, result); } if (i+1<+n && board[i+1][j] === word[step]) { backtrack(board, i+1, j, step, result); } if (j-1>=0 && board[i][j-1] === word[step]) { backtrack(board, i, j-1, step, result); } if (j+1<+m && board[i][j+1] === word[step]) { backtrack(board, i, j+1, step, result); } step--; backtrack(board, i, j+1, step); } return false; }; backtrack(board, 0, 0); console.log(output); }
sudoku(`5 5 HELLO OAIHL HCDOL ELLOW OABRT OABRH`);
sudoku(`4 5 HELLO ABCHE HDFGH ELRTY ALOGH`);
|