使用指针找到矩阵的鞍点

时间:2014-05-29 03:49:25

标签: c algorithm pointers matrix

如果某个条目a [i] [j]在行i中最小并且在列j中最大,则称N×M矩阵具有鞍点。在以下示例中,7是鞍点:

    1 2 3
a = 4 5 6
    7 8 9

函数的复杂性应为O(n log n)。

所需的函数原型是:

int solution(int **A, int N, int M )

我的代码:

int solution(int **A, int N ,int M)
{
    int i=0,j=0,k=0;
    int P_row=0,P_col=0, flag=0;
    node * matrix= (*A);

    for(i=0;i<N;i++)
    {
        P_row=i;
        P_row=j;
        flag=0;

        for(j=0;j<M;j++)
        if(matrix[i][j]< matrix[P_row][P_col])
        {
            P_row=i;
            P_row=j;
        }

        for(k=0;k<N;k++)
        {
            if(matrix[k][P_col]> matrix[P_row][P_col])
            {
                flag=1;
                break;
            }
        }
        if(flag==0)
            break;
        j=0;
    }
    if(flag==0)
        printf("\n The saddle point is %d at row=%d col=%d", matrix[P_row][P_col],P_row,P_col);
    else
        printf("there was no saddle point");
}

当我运行代码时,我在第5行第14行第22行中遇到编译错误,其中我已指定嵌套for循环中的条件。请告诉我根据给定的输入参数修改我的代码的位置。

1 个答案:

答案 0 :(得分:0)

这适用于您的示例: P_row = I; P_row = j的;这显然是一个容易解决的错误。

#include <cstdio>

int solution(int **A, int N, int M );

int A1[] = {1, 2, 3};
int A2[] = {4, 5, 6};
int A3[] = {7, 8, 9};

int* A[] ={A1, A2, A3};
int main()
{
    solution(A, 3, 3);
}
typedef int** node;


int solution(int **A, int N ,int M)
{
    int i=0,j=0,k=0;
    int P_row=0,P_col=0, flag=0;
    node matrix= (A);

    for(i=0;i<N;i++)
    {
        P_row=i;
        P_col=j;
        flag=0;

        for(j=0;j<M;j++)
        if(matrix[i][j]< matrix[P_row][P_col])
        {
            P_row=i;
            P_col=j;
        }

        for(k=0;k<N;k++)
        {
            if(matrix[k][P_col]> matrix[P_row][P_col])
            {
                flag=1;
                break;
            }
        }
        if(flag==0)
            break;
        j=0;
    }
    if(flag==0)
        printf("\n The saddle point is %d at row=%d col=%d", matrix[P_row][P_col],P_row,P_col);
    else
        printf("there was no saddle point");
    return 0;
}