C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
具体的解题步骤如下:
输入解析:
第一行输入提供了矩阵的行数 n 和列数 m。
随后的每一行表示矩阵的一行,矩阵元素之间以逗号分隔。我们需要将这些输入数据解析为一个二维矩阵。
深度优先搜索(DFS):
对每一个 “M” 字符,尝试沿着四个方向(右、下、右下、左下)进行扩展。每扩展一次,计数器增加,并继续沿该方向扩展,直到遇到边界或者非 “M” 字符。
每个 “M” 字符都可能是一个连通序列的起点,因此需要尝试从每个 “M” 开始沿四个方向进行搜索,计算当前方向上的连通长度。
更新最大长度:
在遍历过程中,始终记录下遇到的最大连通长度,并返回最终结果。
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const directions = [
[0, 1],
[1, 0],
[1, 1],
[1, -1]
];
const lines = [];
let n, m;
rl.on("line", (line) => {
lines.push(line);
if (lines.length === 1) {
[n, m] = lines[0].split(",").map(Number);
}
if (n && lines.length === n + 1) {
lines.shift();
const matrix = lines.map((line) => line.split(","));
console.log(findMaxSequence(matrix, n, m));
lines.length = 0;
});
function findMaxSequence(matrix, n, m) {
let maxLength = 0;
function dfs(x, y, dx, dy) {
let length = 1;
let newX = x + dx;
let newY = y + dy;
while (newX >= 0 && newX < n && newY >= 0 && newY < m && matrix[newX][newY] === "M") {
length++;
newX += dx;
newY += dy;
}
return length;
}
for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
if (matrix[i][j] === "M") {
for (let [dx, dy] of directions) {
maxLength = Math.max(maxLength, dfs(i, j, dx, dy));
}
}
}
}
return maxLength;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 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
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: