2 次元マトリックスのサドル ポイントを見つけ、ポインターを使用してマトリックスを参照しようとしていますが、コードが意図したとおりに実行されません。
ここに私のコードがあります
#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 ではなく空白である必要があります。コードの何が問題なのかわからない
編集:新しい問題に遭遇しました。テスト ケースの 1 つには、次のような入力があります。
(3x4) マトリックス、無関係-1
で-5
、右側の最後の列に:
入力:
-1 -2 -1 3 -1
-3 -5 2 3 -5
0 0 0 1
出力:-2
期待される出力は です0
。
このテスト ケースでは、-1
と-5
は、列数を超える余分な入力です。それらは null と見なされるべきですが、この場合はそうではありません。