【问题标题】:finding saddle point in 2d matrix在二维矩阵中找到鞍点
【发布时间】:2021-12-20 00:04:40
【问题描述】:

我正在尝试查找 2d 矩阵的鞍点并使用指针返回矩阵,但我的代码未按预期执行。

这是我的代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, m, i, j;
    int small, smallcol, large, largerow;

    scanf("%d%d", &n, &m);  // n is row, m is column
    int a[n][m];
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }

    int* p[n];

    for (i = 0; i < n; i++)
    {
        p[i] = a[i];
    }

    for (i = 0; i < n; i++)
    {
        small = *p[I];
        smallcol = 0;
        ;
        for (j = 1; j < m; j++)
        {
            if (*(p[i] + j) > small)
            {
                small = *(p[i] + j);
            }
        }
        large = *(p[0] + smallcol);
        largerow = 0;
        for (j = 1; j < n; j++)
        {
            if (*(p[j] + smallcol) > large)
            {
                large = *(p[j] + smallcol);
                largerow = j;
            }
        }

        if (i == largerow)
        {
            printf("%d", *(p[i] + smallcol));
        }
        if (i != largerow)
        {
            printf(" ");
        }
    }

    return 0;
}

这张图片显示了输入(3x3 矩阵)和输出应该是空白而不是 8,因为矩阵中没有鞍点。我不确定我的代码有什么问题

编辑:我遇到了一个新问题。其中一个测试用例的输入为:

(3x4) 矩阵,在右侧最后一列中有一个无关的 -1-5

输入:

-1 -2 -1  3 -1
-3 -5  2  3 -5
 0  0  0  1

输出:-2

预期的输出应该是0

在此测试用例中,-1-5 是超出列数的额外输入。它们应该被视为 null,但在这种情况下它们不是。

【问题讨论】:

  • [I] 看起来很可疑。不应该是[i]吗?
  • 我在粘贴代码时出错了,应该是[I],很抱歉造成混淆。
  • 这种情况下鞍点的定义是什么?唯一给出的是产生错误输出的代码
  • 鞍点是一个在其行中最小且在其列中最大的数字
  • 好的。矩阵边界上的点呢?

标签: c pointers matrix saddle


【解决方案1】:

这里有两个错误:

      if (*(p[i] + j) > small)
        {

您的意思是&lt; 而不是&gt;,并且忘记存储列索引;正确:

      if (*(p[i] + j) < small)    // or simply if (a[i][j] < small)
      {   smallcol = j,

【讨论】:

  • 感谢您的帮助!
  • @StevenYelnats,请感谢 Armali 1. 使用答案左侧的向上箭头支持他们的答案(给他们 10 分),2. 将他们的答案标记为正确答案(如果解决了你的问题),点击他们答案旁边的绿色复选标记(这给他们 15 分,给你 2 分)。 “谢谢”最好以赞成票和标记为正确的答案的形式给出。
猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2020-08-17
  • 2023-03-03
相关资源
最近更新 更多