The_Structor Opublikowano 17 Stycznia 2005 Zgłoś Opublikowano 17 Stycznia 2005 (edytowane) Prosze o pomoc, napisalem taki program, ktory mi wyznacza minimalne drzewo rozpinajace dla grafu nieskierowanego (mniejsza o to, bo to nie jest najwazniejsze). Nie wiem czemu jako drugi wierzcholek wyrzuca mi glupoty :9, bardzo prosze o pomoc: #include <iostream>#include <stdlib.h>#include <fstream>using namespace std;const int inf=20000;int *wagi;int *kolejka;int *poprzednie;int **graf1;char nazwa[100];int x,a,y;int zdejmij_lista () {int i;int n=inf+1;int w=-1;for (i=0; i<x; i++) {if (kolejka [i]==1) if (wagi[i]<n) { w=i; n=wagi[i];}}kolejka[w]=0;return w;}void prim () {int i,j;int u;wagi[0]=0;kolejka[0]=0;for (i=1; i<x; i++) {wagi[i]=inf;kolejka[i]=1;}for (i=1; i<x; i++) {u=zdejmij_lista();for (j=0; j<x; j++) { if ((kolejka[j]==1)&&(graf1[u][j]>0)) if (wagi[j]>graf1[u][j]) { poprzednie[j]=u; wagi[j]=graf1[u][j];}}}}int main () {int i,j;cout<<"Podaj nazwe pliku do ktorego chcesz zapisac tablice: ";cin>>nazwa;ofstream plik_dane (nazwa);if (!plik_dane) {cout<<"Pliku nie mozna utworzyc"<<"\n";}else {cout << "Podaj ilosc wierzcholkow w grafie:\n";cin >> x;plik_dane<<x;wagi=new int[x];kolejka=new int[x];poprzednie=new int[x];graf1 = new int * [x];for (i=0; i<x; i++) {graf1[i] = new int [x];}for (i=0; i<x; i++) { for (j=0; j<x; j++) { cout << "Odleglosc od wierzcholka " << i+1 << " do " << j+1 << " = "; cin >> graf1[i][j]; plik_dane<<" "<<graf1[i][j];}}plik_dane.close();prim();for(i=0;i<x;i++)delete [] graf1[i];delete [] graf1;cout << "Krawedzie nalezace do minimalnego drzewa rozpinajacego:\n";for (i=1; i<x; i++) {cout <<"("<< i+1 << "," << poprzednie[i] <<")\t";}cout << "\n";system("pause");return 0;}} Program jest pisany na zaliczenie i musze oddac na wtorek, nie blagam tu o pomoc, tylko ladnie prosze (i nie o wykonanie za mnie roboty, tylko o pomoc, mysle ze to roznica - to dla czepialskich :)) Aha dla ciekawych: jak nie ma "odleglosci" pomiedzy jakimis wierzcholkami to wpiszcie sobie "-1", np. pomiedzy wierzcholkiem 1 i 1 nie ma doleglosci bo to ten sam wierzcholek :) thx za pomoc . Edytowane 17 Stycznia 2005 przez The_Structor Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...