odejmowanie minimum z kolmny/wiersza problem

0

Witam

Mam problem z implementacją algorytmu węgierskiego a mianowicie mam tablice 4x4 i musze znaleźć minimum w każdym wierszu odjąć później od tego wiersza to minimum (dla każdego wiersza postępuje tak samo) i później musze znaleźć minimum w każdej kolumnie i tak samo odjąć to minimum od kolumny

taki mam kod który szuka tego minimum ale jak zrobić zeby to minimum odjął od tej kolumny/wiersza
to ma tak wyglądać jak w linku [url]http://zasoby1.open.agh.edu.pl/dydaktyka/matematyka/c_badania_operacyjne/krok/krok8_02.html[/url]

#include <cstdlib>
#include <iostream>
#include <cmath>
#include <conio.h>
#include <ctype.h>
using namespace std;

int main(int argc, char *argv[])
{
//wypełnianie tabeli-------------------------------------------
    int min, tab[4][4];
    for (int i=0; i<4; i++)
    {
        for (int j=0; j<4; j++)
        {
           
            cin>>tab[i][j];
            }
            }
//----------------------------------------------------------
            for (int i=0; i<4; i++)//wyswietalnie
    {
    
        for (int j=0; j<4; j++)
        {
            cout<<"element nr"<<i<<j<<"  "<<tab[i][j]<<endl;
            }
            }
//-------------------------------------------------------------           
 for (int i=0;i<4;i++)//znajdowanie minimum w wierszu
 {         
           int j=0;
            unsigned Minimalna = tab[i][j];
for (unsigned j = 0; j < 4; ++j)
{
    
    if (Minimalna > tab[i][j])
        Minimalna = tab[i][j];       
}
 
std::cout << "Minimalna wartosc wiersza "<< Minimalna << std::endl;


}            
//-------------------------------------------------------
for (int j=0;j<4;j++)//znajdowanie minimum w kolumnie
 {         
           int i=0;
            unsigned Minimalna1 = tab[i][j];
for (unsigned i = 0; i < 4; ++i)
{
    
    if (Minimalna1 > tab[i][j])
        Minimalna1 = tab[i][j];
}
std::cout << "Minimalna wartosc kolumny "<< Minimalna1 << std::endl;

}


    system("PAUSE");
    return EXIT_SUCCESS;
}

przepraszam za trochę chaotyczny kod ;)

0

A na czym polega twój problem? Zadanie jest dość jasno określone i jest dość proste. Iterujesz po wierszu/kolumnie i odejmujesz znalezione minimum.

0

Podam kod który tworzy 2 tablice W[] i K[] zawierające odpowiednio minimum w każdym wierszu i kolumnie. Kod tylko odejmuje minimum w wierszu od elementów tego wiersza. Przerób aby odejmował minimum w kolumnach i wierszach.

 
#include<iostream>
#include <cstdlib>
using namespace std;
const int M=4;
int main()
{  
     int N=20,i,j,tab[M][M],W[M],K[M];    
     srand(time(NULL));
 for(i=0;i<M;++i)     
  {
   for(j=0;j<M;++j)
     {
      tab[i][j]=rand()%N+1;
      cout<<tab[i][j]<<" ";  
     }
     cout<<"\n";
  }
//wyznaczenie minimum w kazdej kolumnie:  
  int mn=N+1;
  int k=0;j=0;  
do  
{
for(i=0;i<M;++i)
   {
     if(tab[i][j]<mn)mn=tab[i][j];
    } 
    K[k]=mn; 
    k++;j++;mn=N+1;
}
while(k<M);

//wyznaczenie minimum w kazdym wierszu:
 mn=N+1;
 k=0;i=0;  
do  
{
for(j=0;j<M;++j)
   {
     if(tab[i][j]<mn)mn=tab[i][j];
    } 
    W[k]=mn; 
    k++;i++;mn=N+1;
}
while(k<M);

for(i=0;i<M;++i)
{
  for(j=0;j<M;++j)
   {
    tab[i][j]=tab[i][j]-W[i]; //odejmuje z kadego elementu wiersza min tego wiersza      
   }
}

    cout<<"\n\npo odjeciu minimum tego wiersza od kazdego elementu wiersza\n";
for(i=0;i<M;++i)
{
  for(j=0;j<M;++j)
  {cout<<tab[i][j]<<" ";
  }  
  cout<<"\n";
}
  
  cout<<"\n\n"; 
for(i=0;i<M;++i)cout<<"K["<<i<<"]="<<K[i]<<" ";
cout<<"\n";
for(i=0;i<M;++i)cout<<"W["<<i<<"]="<<W[i]<<" ";
cout<<"\n press ENTER";
   while(getchar()!='\n') {}
   return 0;
  }
  
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1