Próbuję zrobić kod który z pośród podanych n miast i m traktów będzie szukał najtańszego połączenia wszystkich miast ( jeśli jest ich więcej to będzie szukał czy dany punkt należy do jednego z nich ) . chciałem zrobić to poniższym sposobem zliczając najpierw najniższe "w" czyli ceny połączeń 2 miast. chciałem polecieć od najtańszych miast i ustalić jaka jest najniższa cena połączenia wszystkich miast dlatego zrobiłem tabele zer tb gdzie pod każdym indeksem będziemy wpisywać 1 jeśli ten trakt ma co najmniej jedno miast które jeszcze się nie łączyło z żadnym innym miastem. miasta to p i k. Jednak zawsze kiedy próbuje wpisać 2 miasta jeden trakt i te miasta numerami 1 , 2 i cena 3 to kiedy sprawdzam indeks tablicy tb który powinien wynosić 0 to pokazuje mi w konsoli ujemną liczbę.
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
struct trakty
{
int p;
int k;
int w;
};
bool porownanie(trakty t1,trakty t2)
{
return t1.w > t2.w;
}
int main()
{
int m,n;
cin>>n>>m;
trakty t[m];
int tb[n+1];
bool pf[n];
int min = 0;
/*for(int j = 0;j<n;j++)
{
pf[n]=true;
}*/
for(int r = 0;r<m;r++)
{
cin>>t[r].p>>t[r].k>>t[r].w;
}
sort(t, t +m,porownanie);
for(int i = m-1;i>=0;i--)
{
cout<<t[i].p<<" "<<t[i].k<<" "<<t[i].w<<endl;
cout<<tb[t[i].p]; // wyswietla mi sie ujemna liczba a powinno być zero
if(tb[t[i].k] < 1 ||tb[t[i].p] < 1)
{
if(tb[t[i].k] < 1)
{
tb[t[i].k] + 1;
}
if(tb[t[i].p] < 1)
{
tb[t[i].p] + 1;
}
//min = min + t[i].w;
}
}
// cout<<min<<endl;
return 0;
}