C 用指针求矩阵的鞍点

C 用指针求矩阵的鞍点,c,algorithm,pointers,matrix,C,Algorithm,Pointers,Matrix,如果某个条目a[i][j]在第i行中最小,在第j列中最大,则称N×M矩阵具有鞍点。在以下示例中,7是鞍点: 1 2 3 a = 4 5 6 7 8 9 函数的复杂度应该是O(n logn) 所需的功能原型是: 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;

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

    1 2 3
a = 4 5 6
    7 8 9
函数的复杂度应该是O(n logn)

所需的功能原型是:

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");
}
int解决方案(int**A,int N,int M)
{
int i=0,j=0,k=0;
int P_行=0,P_列=0,标志=0;
节点*矩阵=(*A);

对于(i=0;i这对您的示例有效: 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;
}
#包括
整数解(整数**A,整数N,整数M);
int A1[]={1,2,3};
int A2[]={4,5,6};
int A3[]={7,8,9};
int*A[]={A1,A2,A3};
int main()
{
溶液(A,3,3);
}
typedef int**节点;
整数解(整数**A,整数N,整数M)
{
int i=0,j=0,k=0;
int P_行=0,P_列=0,标志=0;
节点矩阵=(A);

对于(i=0;iYou应该能够创建两个数组,表示列之间的最大值和行之间的最小值。然后确定鞍点是
O(M*N)
来构建这些数组和
O(M+N)
确定鞍点。实际上,您正在重新计算每一行的列最大值。您的实际问题是什么?您提供的代码是否失败?如果失败,那么在哪里?您尝试了什么来解决它?当您找到鞍点时,您的代码将读作
P_row=i;P_row=j;
。这使得第一个赋值无效,并且看起来很难uspicous:在出现的两个位置将
P_row=j
替换为
P_col=j
。示意性建议:打印内容时,请将换行符放在格式字符串的末尾,以便输出总是以换行符终止。因为函数返回
void
,并且所需的原型返回
int
,你的代码立即没有通过任何评分。嘿,Geo,你的答案刚刚被删除了这个问题:-如果你愿意,你可以取消删除它-编辑后,它肯定是一个很好的答案,不应该被删除。我怀疑你的方法可能有效,即使分数是完全随机的