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);

  // 第一个输入是矩阵的行数和列数,解析并赋值给 n 和 m
  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(","));
    // 输出最大连通 "M" 序列的长度
    console.log(findMaxSequence(matrix, n, m));
    // 清空输入行数据,准备下一轮输入
    lines.length = 0;
});

// 计算矩阵中最大连通 "M" 序列的函数
function findMaxSequence(matrix, n, m) {
  let maxLength = 0;

  // 深度优先搜索:从当前位置开始,沿着给定方向扩展,返回扩展的 "M" 序列长度
  function dfs(x, y, dx, dy) {
    let length = 1;  // 当前 "M" 本身已经算作一个序列
    let newX = x + dx;  // 下一行坐标
    let newY = y + dy;  // 下一列坐标

    // 持续沿方向扩展,直到越界或遇到非 "M" 字符
    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++) {
      // 如果当前位置是 "M"(表示男孩)
      if (matrix[i][j] === "M") {
        // 对每一个方向进行深度优先搜索
        for (let [dx, dy] of directions) {
          // 更新最大连通长度
          maxLength = Math.max(maxLength, dfs(i, j, dx, dy));
        }
      }
    }
  }

  return maxLength;  // 返回最大连通 "M" 的长度
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145099535"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!