跪求C语言编程:随机生成N*N的矩阵,选出n个最小数,要求这些数来自不同行何不同列。各位大神帮帮忙!

2024-12-21 14:28:02
推荐回答(2个)
回答1:

写了一个简单的,不知道是否符合你的要求。

#include 
#include 
#include 
// 矩阵维数
#define N 4
// 存放随机生成的矩阵
int matrix[N][N] = {0};
// 存放所求的来自不同行不同列的最小数
int leastNum[N] = {0};
int main()
{
    int i, j; 
    int n = 4; // 最小数的个数,显然小于等于矩阵的维数N
    int count = 0;
    int min = 0;
    int row = 0; // 记录已经产生过最小数的行标识位
    int column = 0; // 记录已经产生过最小数的列标识位
    int x, y;
    /* 生成并打印随机矩阵 */
    srand((unsigned int)time(NULL));
    for (i=0; i    {
        for (j=0; j        {
            matrix[i][j] = rand();
            printf("%12d", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n The least numbers are:\n");
    while(count < n)
    {
        /* 遍历求满足条件的最小数,并记录下坐标 */
        min = 0x7fffffff;
        for (i=0; i            for (j=0; j            {
                if (((1<                    ((1<                    (matrix[i][j] < min))
                {
                    min = matrix[i][j];
                    x = i;
                    y = j;
                }
            }
        /* 记录找到的最小数,并标记该最小数的行列位置 */
        leastNum[count++] = min;
        row = row | 1<        column = column | 1<        /* 打印输出最小数 */
        printf("%12d", min);
    }
    printf("\n");
    return 0;
}

回答2:

mark一下。坐等大神回答。顺便问楼主几个问题。问题是这个演化算法啊,楼主有资料参考下不?贪心算法只能求得局部最优解,行不通。