2013-03-10 99 views
0

我怎样才能找到一个N * M矩阵的每一行中的最小值的每一行中的最小值,并把这些值到一个新的阵列?我有这样的代码,到目前为止,但它无法正常工作:C++查找N * M的矩阵

void min(const int t[max_city][max_bird], int allmin[], int n, int m) 
{ 
    int min=t[0][0]; 
    for(int i=0; i<n; ++i) 
    { 
     for(int j=0; j<m; ++j) 
     { 
      if(t[i][j]<min) 
      { 
       min=t[i][j]; 
      } 
     } 
     allmin[i]=min; 
     cout << i+1 << ". min: " << allmin[i] << endl; 
    } 
} 
+0

如果你定义一个单独的函数,它在1行(一维数组)并返回它的最小值,然后用它来计算出你的矩阵 – jozefg 2013-03-10 19:04:13

回答

5

申报min第一循环中,有初始化:

for(int i=0; i<n; ++i) 
{ 
    int min= INT_MAX; //do this here so that it gets initialized each time! 

    for(int j=0; j<m; ++j) 
    { 
     //your code 
    } 
    //etc 
} 

要使用INT_MAX,包括<climits>


使用std::min_element,你的函数可以重新写为:

void min(const int t[max_city][max_bird], int allmin[], int n, int m) 
{ 
    for(int i=0; i<n; ++i) 
    { 
     allmin[i] = *std::min_element(t[i], t[i] + m); 
    } 
} 

它变得如此短暂!

功能std::min_element返回指针到最小元素,所以你取消引用返回指针获取值(的最小元素)。

要在程序中使用std::min_element,你必须包含这个头:

#include <algorithm> 

希望有所帮助。

+1

伟大工程的所有最小值的问题变得清晰,谢谢! :) – fviktor99 2013-03-10 19:09:32