wybieranie kolejnych min-elementow bez powtorzen

0

mam problem.polega on na tym ze chce wybrac z tablicy tabl3d najmniejsze elementy. jednakze jezeli wybore element minimalny z rozmiaru [p] to chce aby [o] bylo równe p i znow szukalo minimalnego elementu tablicy. problem w tym ze jesli o raz przyjmnie jakąś wartość to drugi raz juz nie moze.jak to zrobic?! oto kod

#include<iostream>
#include<fstream>
#include<conio.h>
#include<math.h>

using namespace std;
int n,v,n2=100,score=0;

int tablwynik[1000][1000], tablwynikzocz[1000][1000], tabbest[1000];
int tabl3d[1000][1000][100];
int lala[1000],lala2[1000];
int main() 
{        
            int tablica[100],i=0;
            ifstream odczyt("ok09_01.txt");
            while(!odczyt.eof())
                {               
                odczyt>>tablica[i];//wczytanie pliku do tablicy
                i++;
                }
             for(int a=0; a<i-1; a++)
               {
               cout << tablica[a]<<endl;         
            }
            cout << endl;
            cout << endl;

            n = tablica[0];//przypisanie do stalej n 
           v = tablica[1];//przypisanie do stalej v
          cout << "tablica x" <<endl;
       int tablicaX[n];//tablica z wspolrzednymi x
             for(int j=0;j<n;j++)
             {
                     tablicaX[j] = tablica[2+(9*j)];
             cout<<tablicaX[j]<<endl;
             }
              cout << "tablica y" <<endl;
       int tablicaY[n];//tablica z wspolrzednymi y
           for(int j=0;j<n;j++)
             {
                     tablicaY[j] = tablica[3+(9*j)];
             cout<<tablicaY[j]<<endl;
             }
             cout<<endl;

       int tablicaT[n][7];
           for (int i=0;i<n;i++)
           {
            for (int j=0;j<7;j++)
             {
             tablicaT[i][j]=tablica[(4+(j+(i*9)))];
             cout<<tablicaT[i][j];
             }
             cout<<endl;
             }
             cout<<endl;
              cout<<tablicaT[3][6]<<endl;
              cout<<endl;
              
//------------------------------------------------------------------------------              
 //heurystyka
 double potx,poty;
 for(int i=0;i<n;i++)
 {
 for(int j=0;j<n;j++)
 {
         potx=(tablicaX[i]*tablicaX[i])-(2*tablicaX[i]*tablicaX[j])+(tablicaX[j]*tablicaX[j]);
         poty=(tablicaY[i]*tablicaY[i])-(2*tablicaY[i]*tablicaY[j])+(tablicaY[j]*tablicaY[j]);
         
         tablwynik[i][j]= ceil(ceil(sqrt(potx + poty))/v);
         //tablwynikzocz[i][j] = tablwynik[i][j] + tablicaT[i][j];
         cout<<tablwynik[i][j]<<" " ;
         //cout << potx<<"   " << poty<<endl;
         }
         cout<<endl;
         
         }
         
         cout<<endl;
         
         for(int i=0;i<n;i++)
         {
                 for(int j=0;j<n;j++)
                 {
                         for(int k=0;k<n;k++)
                         {
                                          potx=(tablicaX[i]*tablicaX[i])-(2*tablicaX[i]*tablicaX[j])+(tablicaX[j]*tablicaX[j]);
         poty=(tablicaY[i]*tablicaY[i])-(2*tablicaY[i]*tablicaY[j])+(tablicaY[j]*tablicaY[j]);
//
         if(k==0)tabl3d[i][j][k] = tablicaT[i][0] ;
         else
         {
                         tabl3d[i][j][k]= ceil(ceil(sqrt(potx + poty))/v)+tablicaT[j][k];}//+tablicaT[0][0];}
                         cout<<tabl3d[i][j][k]<<" ";
                         }
                         cout<<endl;
                         //tablica[i][j][k] = tablica[i][0];
                         }
                         cout<<endl;
                         }
         
         
         int sprawdz = tabl3d[4][0][1] + tabl3d[0][2][2] + tabl3d[2][1][3] + tabl3d[1][5][4]+tabl3d[5][6][5]+tabl3d[6][3][6]+ tablicaT[4][0];
         cout<<sprawdz;
         cout<<endl;
         int min,o=0,min2,min3,max;
         min = tabl3d[0][1][1];
         int tabind[20],tabrez[100],tabo[100]= {0};
int index=0,pom1=0,pom2=0,k=1,per;





int p=0;
for(k;k<n;)
{


//min=tabl3d[o][0][k];
min=40;
         for(p=0;p<n;p++)
         
{

if (o!=p )
{            
   
   if(tabl3d[o][p][k]<min){min=tabl3d[o][p][k];index=p;}
//}


tabind[k]=index;
tabrez[k]=min;
}


    cout<<endl;  
  cout<<min<<"  "<<index;

}
      o=tabind[k];  


k++; 

}



cout<<endl;
cout<<endl;
      for (int i=1;i<n;i++)
cout<<tabind[i]<<" "<<tabrez[i]<<"  ";     

                 
              





getch();
}
0

a można prosić o opis bez skrótów myślowych?
wszystko wpakowałeś do main, podziel to na logiczne kawałki to może ktoś zechce to analizować. Formatowanie kodu też nie jest najlepsze (w niektórych miejscach wręcz tragiczne i mylące).

Tu masz poprawione formatowanie (sam kod nietknięty):

#include<iostream>
#include<fstream>
#include<conio.h>
#include<math.h>

using namespace std;
int n,v,n2=100,score=0;

int tablwynik[1000][1000], tablwynikzocz[1000][1000], tabbest[1000];
int tabl3d[1000][1000][100];
int lala[1000],lala2[1000];
int main()
{
    int tablica[100],i=0;
    ifstream odczyt("ok09_01.txt");
    while(!odczyt.eof())
    {
        odczyt>>tablica[i];//wczytanie pliku do tablicy
        i++;
    }
    for(int a=0; a<i-1; a++)
    {
        cout << tablica[a]<<endl;
    }
    cout << endl;
    cout << endl;
    
    n = tablica[0];//przypisanie do stalej n
    v = tablica[1];//przypisanie do stalej v
    cout << "tablica x" <<endl;
    int tablicaX[n];//tablica z wspolrzednymi x
    for(int j=0;j<n;j++)
    {
        tablicaX[j] = tablica[2+(9*j)];
        cout<<tablicaX[j]<<endl;
    }
    cout << "tablica y" <<endl;
    int tablicaY[n];//tablica z wspolrzednymi y
    for(int j=0;j<n;j++)
    {
        tablicaY[j] = tablica[3+(9*j)];
        cout<<tablicaY[j]<<endl;
    }
    cout<<endl;
    
    int tablicaT[n][7];
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<7;j++)
        {
            tablicaT[i][j]=tablica[(4+(j+(i*9)))];
            cout<<tablicaT[i][j];
        }
        cout<<endl;
    }
    cout<<endl;
    cout<<tablicaT[3][6]<<endl;
    cout<<endl;
    
    //------------------------------------------------------------------------------
    //heurystyka
    double potx,poty;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            potx=(tablicaX[i]*tablicaX[i])-(2*tablicaX[i]*tablicaX[j])+(tablicaX[j]*tablicaX[j]);
            poty=(tablicaY[i]*tablicaY[i])-(2*tablicaY[i]*tablicaY[j])+(tablicaY[j]*tablicaY[j]);
            
            tablwynik[i][j]= ceil(ceil(sqrt(potx + poty))/v);
            //tablwynikzocz[i][j] = tablwynik[i][j] + tablicaT[i][j];
            cout<<tablwynik[i][j]<<" " ;
            //cout << potx<<"   " << poty<<endl;
        }
        cout<<endl;
        
    }
    
    cout<<endl;
    
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            for(int k=0;k<n;k++)
            {
                potx=(tablicaX[i]*tablicaX[i])-(2*tablicaX[i]*tablicaX[j])+(tablicaX[j]*tablicaX[j]);
                poty=(tablicaY[i]*tablicaY[i])-(2*tablicaY[i]*tablicaY[j])+(tablicaY[j]*tablicaY[j]);
                //
                if(k==0){
                    tabl3d[i][j][k] = tablicaT[i][0];
                } else {
                    tabl3d[i][j][k]= ceil(ceil(sqrt(potx + poty))/v)+tablicaT[j][k];
                }//+tablicaT[0][0];}
                cout<<tabl3d[i][j][k]<<" ";
            }
            cout<<endl;
            //tablica[i][j][k] = tablica[i][0];
        }
        cout<<endl;
    }
    
    int sprawdz = tabl3d[4][0][1] + tabl3d[0][2][2] + tabl3d[2][1][3] + tabl3d[1][5][4]+tabl3d[5][6][5]+tabl3d[6][3][6]+ tablicaT[4][0];
    cout<<sprawdz;
    cout<<endl;
    int min,o=0,min2,min3,max;
    min = tabl3d[0][1][1];
    int tabind[20],tabrez[100],tabo[100]= {0};
    int index=0,pom1=0,pom2=0,k=1,per;
    
    int p=0;
    for(k;k<n;)
    {
        //min=tabl3d[o][0][k];
        min=40;
        for(p=0;p<n;p++) {            
            if (o!=p )
            {                
                if(tabl3d[o][p][k]<min) 
                {
                    min=tabl3d[o][p][k];index=p;
                }
                
                tabind[k]=index;
                tabrez[k]=min;
            }
            
            cout<<endl;
            cout<<min<<"  "<<index;            
        }
        o=tabind[k];
        
        k++;    
    }
    
    cout<<endl;
    cout<<endl;
    for (int i=1;i<n;i++)
        cout<<tabind[i]<<" "<<tabrez[i]<<"  ";
    
    getch();
}
0

chodzi o to ze po uruchomieniu programu ostatnia wynik rezultatu to ma byc np liczba 2 i 21 czyli index odwiedzonego miasta i wartosc minimalna z kolumny..problem polega na tym ze index nie moze sie powtórzyc. warunek if(o!=p) powoduje ze nie sa wyswietlane wyniki gdy index o jest równy p bo jest to podróz z miasta np 1 do 1 czyli nie mozliwa...jesli o wedrowalo z 2 do 1 z 1 do 6 to juz z 6 nie moze wrocic ani do 1 ani do 2..i nie wiem jak zapisac ten warunek..czekam na odp.

0

jesli o wedrowalo z 2 do 1 z 1 do 6 to juz z 6 nie moze wrocic ani do 1 ani do 2

Zapamiętać w tablicy odwiedzone miasta i sprawdzać później czy badane miasto nie jest w tej tablicy.

0

no tak wlasnie robilem...tylko ze otczytac ta tablice musze w jakies petli...a to juz wtedy bedzie petla zagniezdzona..chyba ze ja cos zrobilem zle..

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