Skocz do zawartości

Glapa

Użytkownik
  • Liczba zawartości

    33
  • Rejestracja

  • Ostatnia wizyta

O Glapa

  • Urodziny 08.10.1989

Informacje

  • Wersja
    FM 2013
  • Skąd
    Wrocław
  • Płeć
    Mężczyzna

Ostatnie wizyty

2 228 wyświetleń profilu

Glapa's Achievements

Nowy

Nowy (1/15)

0

Reputacja

  1. Glapa

    Programowanie

    Ten zabieg nie pomoże, ponieważ błąd pojawia się w pliku nagłówkowym. Proponuję przyzwyczaić się do opisywania wskaźników bez białego znaku po typie lub przed nazwą zmiennych (metoda formatowania C/C++). Wydaje mi się, że problem stanowi odwołanie do węzła poprzez operator '::'. Spróbuj zamiast niego użyć: DLista<typ>.wezel *wybrany;
  2. @up good point dodam jeszcze tylko, że przy końcu równi pochyłej zmianie ulegnie składowa pionowa prędkości. Obiekt będzie leciał dalej przy wzroście kąta do 45 stopni( maleje tarcie wraz ze wzrostem , a następnie zacznie maleć. Wynika to z faktu, że po przekroczeniu kąta 45 stopni zacznie znacząco maleć składowa pozioma przyspieszenia.
  3. po pierwsze zerknij tutaj :obrazek W tym momencie interesuje nas najbardziej wzór na przyspieszenie ciała. Widzimy w nim dwie straszne funkcje trygonometryczne ;) i współczynnik tarcia. Zacznijmy od różnych kątów dla tej samej powierzchni. Współczynnik tarcia jest taki sam więc interesują nas tylko wartości cos i sin dla danego kąta. Kiedy zwiększamy kąt nasz cos maleje, a sin rośnie w związku z czym ciało będzie miało większe przyspieszenie i tym samym poleci dalej. Oczywiście dla powierzchni gładkiej współczynnik tarcia jest mniejszy, a więc ciała puszczone na tej równi polecą dalej niż z chropowatej. Teraz kwestia kształtu obiektów. Jeśli kulka i klocek to kulka poleci dalej (mniejsza powierzchnia styczna a tym samym mniejsze tarcie no i kulka się toczy, a klocek zsuwa. Jeżeli kulka i samochód to zależy od kształtu i oporów powierza )
  4. Glapa

    Programowanie

    pierwsza część jest prosta << to inaczej *2, a >> to inaczej /2. Musisz wykonać operację przesunięcia w lewo (<<) dwa razy, a w prawo (>>) trzy. W dziesiętnej to raczej nie problem bo używasz cout<<w1<<" "<<w2; natomiast jeśli chodzi o postać szesnastkową cout.setf(ios::hex,ios::basefield); if(w1<0) { w1=w1*(-1); cout<<"-"<<w1; } else { cout<<w1; } i powtarzasz to dla w2 P.S zakładam że w1 i w2 są całkowite (int). A teraz pytanie ode mnie. Piszę program w javie na pojemniki i ambitnie mam coś takiego: package baza0; import javax.swing.*; import java.util.*; class Osoba { String imie=""; String nazwisko=""; float srednia=0; int indeks=0; public void Nadaj_imie(String imie_) { imie=imie_; } public String Podaj_imie() { return imie; } public void Nadaj_nazwisko(String nazw_) { nazwisko=nazw_; } public String Podaj_nazwisko() { return nazwisko; } public void Nadaj_srednia(float srednia_) { srednia=srednia_; } public float Podaj_srednia() { return srednia; } public void Nadaj_indeks(int indeks_) { indeks=indeks_; } public int Podaj_indeks() { return indeks; } public String OsobatoString() { String napis=""; napis+="Imię: "+imie; napis+="\nNazwisko: "+nazwisko; napis+="\nŚrednia: "+srednia; napis+="\nNumer indeksu: "+indeks; return napis; //zwraca dane zamienione na napis } public boolean Szukaj(String S1,String S2) { return (imie.equals(S1)&&nazwisko.equals(S2)); } } class Tablica { Osoba Dane[]=null; int ile=0; public boolean Pusta() { return ile==0; } public boolean Pelna() { return ile==Dane.length; } public int Podaj_ile() { return ile; } public void alokuj_tablice(int N) { ile=0; Dane=new Osoba[N]; //utworzenie tablicy } public void Wstaw(String imie_,String nazwisko_,float srednia_,int indeks_) { Osoba dana=new Osoba(); //tworzy aktualną osobę dana.Nadaj_imie(imie_); dana.Nadaj_nazwisko(nazwisko_); dana.Nadaj_srednia(srednia_); dana.Nadaj_indeks(indeks_); Dane[ile]=dana; //wstawia na odpowiednią pozycję wpisane dane ile++; } public Osoba Wyszukaj(String S1,String S2) { for(int i=0;i<ile;i++) { if (Dane[i].Szukaj(S1,S2)) { return Dane[i]; } } return null; //zwraca 0 jak nie znalazlo } public String TablicatoString() { String S=""; for(int i=0;i<ile;i++) { S+=Dane[i].OsobatoString()+"\n"; } return S; //zwraca zawartość całej tablicy } } public class Baza0 { protected Tablica tablica=new Tablica(); public void Wyswietl() { if (tablica.Pusta())//jesli tablica nie istnieje, to nie można wyswietlac { JOptionPane.showMessageDialog(null,"Brak danych"); } else { JOptionPane.showMessageDialog(null,tablica.TablicatoString()); } } public void Wypelnij() { String S1,S2,S3,S4; S1=JOptionPane.showInputDialog(null,"Podaj rozmiar tablicy"); int N=Integer.parseInt(S1); tablica.alokuj_tablice(N); //utworzenie tablicy while(!tablica.Pelna()) //jeśli tablica jest zapełniona, tak jest równe false { S1=JOptionPane.showInputDialog(null, "Podaj imię"); S2=JOptionPane.showInputDialog(null, "Podaj nazwisko"); S3=JOptionPane.showInputDialog(null, "Podaj średnią"); S4=JOptionPane.showInputDialog(null, "Podaj nr indeksu"); tablica.Wstaw(S1,S2,Float.parseFloat(S3),Integer.parseInt(S4));//dopisanie danych na końcu danych } } public void Wyszukaj() { if (tablica.Pusta())//jesli tablica nie istnieje, to nie można wyszukać { JOptionPane.showMessageDialog(null,"Brak danych"); } else { String S1=JOptionPane.showInputDialog(null,"Podaj Imię"); String S2=JOptionPane.showInputDialog(null,"Podaj Nazwisko"); Osoba osoba=tablica.Wyszukaj(S1,S2); if(osoba!=null) { JOptionPane.showMessageDialog(null,osoba.OsobatoString()); } else { JOptionPane.showMessageDialog(null,"Nic nie znalazłem!", "Błąd", 0); } } } static public void main(String args[]) { Baza0 baza=new Baza0(); //referencja do tablicy, która jest tworzona w opcji 1 char a; String S; do { S=JOptionPane.showInputDialog(null, "Progam nie jest zabezpieczony przed\n" + "złym formatem danych\n i naciskaniem Cancel w okienkach dialogowych\n"+ "Podaj wybor"+ "\n1 - Wypelnij tablice,"+ "\n2 - Wyswietl dane osob"+ "\n3 - Wyszukaj osobe i wyswietl jej dane"+ "\nk - Koniec programu"); a=S.charAt(0); //pobranie opcji switch(a) { case '1': baza.Wypelnij(); break; case '2': baza.Wyswietl(); break; case '3': baza.Wyszukaj(); break; case 'k': JOptionPane.showMessageDialog(null, "Koniec programu"); break; default : JOptionPane.showMessageDialog(null,"Zla opcja"); } }while(a!='k'); System.exit(0); } } Moje pytanie brzmi: Jeżeli dodam Osoba nastepny; do klasy Osoba i później jak będę usuwał powiedzmy element Tablica Dane[3]; wykonując: Tablica Dane[2].nastepny=Dane[4]; Dane[3]=null; , to czy ta tablica obiektów klasy Osoba będzie widziała nowy układ czy muszę zrobić to na samych referencjach do kolejnych obiektów lub przenosząc ostatni element i usuwając go?
  5. Jako debiutant przed wyjazdem miałem pewne obawy jak to będzie. Zaraz po przywitaniu się ze wszystkimi wiedziałem, że nie może być źle i oczywiście nie było. Dzięki za mile spędzonych kilka dni (szkoda tylko, że nie mogłem zostać do końca). Oby więcej tak udanych zjazdów, na których mam nadzieję się pojawić .
  6. Glapa

    Programowanie

    pytanie trochę z innej beczki :P jak w html-u (może być z użyciem css) sprawić, że zawartość strony będzie wyśrodkowana w zależności od rozdzielczości (np. tak jak na nk :P)
  7. OK więc ja poproszę LBL do tego czarny napis rozmiar S
  8. Witam mam pytania dwa . Czy mógłbym przelać kasę we wtorek np? bo rodzice wyjechali, a ja wyczyściłem swoje konto więc do poniedziałku nie dam rady. A drugie bardziej związane z koszulkami :P jak wygląda złoty metalik (napis)? :P
  9. logowanie do youtube jest na połączeniu zabezpieczonym (https) które korzysta z innego portu niż zwykłe strony. Najlepszym sposobem na rozwiązanie problemu będzie udanie się lub telefon do providera i zgłoszenie problemu bo najprawdopodobniej coś jest nie tak u nich skoro po formacie nie ma zmian.
  10. Glapa

    Programowanie

    po pierwsze cin>> i cout<< nie obsługują stringów więc powinno to wyglądać tak: #include <iostream> #include <iomanip> #include <fstream> #define MIN 1 #define MAX 49 #define N 20 using namespace std; struct kupon { int liczby[6]; }; struct glowna { int ile_zakladow; char nazwisko[30]; kupon a; }; struct lista { string nazwa_pliku; }; void lista_plikow(lista &p, string nazwa, ofstream &plik3); void wczytaj (glowna p[], ifstream &plik2, ofstream &plik); void losuj(int tab[6]); void wypisz(int tab[6]); void otworz(glowna p[], lista r[], ifstream &plik5, ifstream &plik4); string nazwa; string nazwa2; int main() { //int licznik=0; int wylosowane_liczby[6]; int pula_nagrod, ile_losowan; int wybor; while(wybor!=3){ cout<<"Witam w symulatorze duzego lotka\n"<<"Autor: Misiek\n\n"<<"Co chcesz wykonac?\n"<<"(1) Wprowadz kupon\n"; cout<<"(2) Rozpocznij symulacje\n"<<"(3) Wyjscie\n"; cout<<endl; ofstream plik, plik3; ifstream plik2, plik4, plik5; cin>>wybor; switch(wybor) { case 1:{ //licznik=licznik+1; lista zmienna; glowna tab[N]; cout<<"Podaj nazwe pliku(format: numer.txt gdzie \"numer\" to kolejna liczba zaczynajac od 1, a konczac na 20)\n"; nazwa=getchar(); //nazwa=licznik; lista_plikow(zmienna, nazwa, plik3); wczytaj(tab, plik2, plik); break; } case 2:{ /* cout<<"Podaj pule nagrod:\n"; cin>>pula_nagrod; cout<<"Ile losowan chcesz wykonac?\n"; cin>>ile_losowan; for(int i=0; i<ile_losowan; i++) { cout<<"W kasetach maszyn losujacych znajduje sie odpowiednia ilosc kul."; _sleep(3000); system("cls"); cout<<"Komory maszyn losujacych sa puste."; _sleep(3000); system("cls"); cout<<"Nastepuje zwolnienie blokady i rozpoczynamy losowanie 6 liczb."; _sleep(3000); system("cls"); srand(time(NULL)); losuj(wylosowane_liczby); cout<<"Wylosowano nastepujace liczby: \n"; wypisz(wylosowane_liczby); float trojka, czworka, piatka, szostka; trojka=((pula_nagrod*10)/100); czworka=((pula_nagrod*15)/100); piatka=((pula_nagrod*20)/100); szostka=pula_nagrod; cout<<"Pula nagrod wynosi: "<<pula_nagrod<<endl; cout<<"Za trafienie trojki mozna wygrac: "<<trojka<<"\n"; cout<<"Za trafienie czworki mozna wygrac: "<<czworka<<"\n"; cout<<"Za trafienie piatki mozna wygrac: "<<piatka<<"\n"; cout<<"Za trafienie szostki mozna wygrac: "<<szostka<<"\n"; */ glowna tab2[N]; lista taba[N]; otworz(tab2, taba, plik5, plik4); cout<<endl; //} break; } case 3: break; default: cout<<"Zly klawisz"; } } system("Pause"); } void wczytaj (glowna p[], ifstream &plik2, ofstream &plik) { plik.open(nazwa.c_str(), ios::out); cout<<"Podaj liczbe zakladow, ktore chcesz zagrac\n"; cin>>p[0].ile_zakladow; plik <<p[0].ile_zakladow<<endl; plik2.open(nazwa.c_str(), ios::in); plik2 >> p[0].ile_zakladow; int zm=p[0].ile_zakladow; //cout<<zm<<endl; for (int i=0; i<zm; i++) { cout<<"Wypelnij "<<i+1<<" zaklad, wpisujac kolejno nazwisko, a potem 6 liczb z zakresu <1,49>\n"; cout<<"Podaj nazwisko\n"; cin.get(); cin.getline(p[i].nazwisko, 30); plik <<p[i].nazwisko<<endl; for (int j=0; j<6; j++) { do{ cout<<"Podaj "<<j+1<<" liczbe: __\b\b"; cin>>p[i].a.liczby[j]; if (p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49) { cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\n Wpisz jeszcze raz\n"; } }while(p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49); } for (int k=0; k<6; k++) { plik<<p[i].a.liczby[k]<<endl; } } plik2.close(); plik.close(); } void losuj(int tab[6]) { int i=0; while(i<6) { tab[i]=rand()%(MAX-MIN+1)+MIN; for(int z=0; z<i; z++) { if (tab[z]==tab[i]) i=i-1; } i+=1; } } void wypisz(int tab[6]) { for (int i=0; i<6; i++) { cout<<setw(4)<<tab[i]; } cout<<"\n"; } void otworz(glowna p[], lista r[], ifstream &plik5, ifstream &plik4) { plik4.open("lista.txt", ios::in); for (int k=0; k<EOF; k++) for (int g=0; g<EOF; g++) { plik4 >>r[k].nazwa_pliku[g]; plik5.open(r[k].nazwa_pliku[g], ios::in); plik5>>p[0].ile_zakladow; int zm=p[0].ile_zakladow; for (int i=0; i<zm; i++) { plik5.ignore(); plik5.getline(p[i].nazwisko, 30); for (int j=0; j<6; j++) { plik5 >> p[i].a.liczby[j]; } } //test czy dobrze wyswietla kazdy kolejny otworzony plik for (int m=0; m<zm; m++) { cout<<endl; cout<<"ile zakladow: "<<zm<<endl; cout<<"nazwisko: "<<p[m].nazwisko<<endl; for (int n=0; n<6; n++) { cout<<p[m].a.liczby[n]<<endl; } } } plik5.close(); plik4.close(); } void lista_plikow(lista &p, string nazwa, ofstream &plik3) { plik3.open("lista.txt", ios::app); p.nazwa_pliku=nazwa; plik3<<p.nazwa_pliku.c_str()<<endl; plik3.close(); } kolejnym problemem jest otwieranie plik5 ponieważ funkcja open przyjmuje jako pierwszy parametr wskaźnik na ciąg znaków więc musiałbyś wrzucić tą nazwe z r.nazwa... do jakiejś tablicy char (nie wiem jaki format mają te pliki więc nie dodawałem tego) i w parametrze przekazujesz wtedy wskaźnik na tą tablice.
  11. Glapa

    Programowanie

    ok moze pomysł mój był nie przemyślany ale można po prostu utworzyć tablice charów w formie nazwa["i.txt"] dzięki czemu odwołując się do 1 wiersza dostaniemy 1.txt i to można wrzucić do wczytaj.
  12. Glapa

    Programowanie

    a nie dało by jakoś na ciągu znaków zrobić np char nazwa [10]="temp0.txt"; i później w pętli przy tworzeniu plików dawać nazwa [4]=(char)i; nazwa[9]='\0'; przez to po kazdym dodaniu mozna zwiekszać i i rzutować jako czar do nazwy pliku a później już normalnie pli.open(nazwa,ios::out);
  13. Glapa

    Programowanie

    if (p[i].a.liczby[j]<1 [color="#FF0000"][font="Arial Black"]||[/font][/color] p[i].a.liczby[j]>49) { cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\n"; system("Pause"); } Dałeś iloczyn zamiast sumy co powodowało, że zdarzenia wzajemnie się wykluczały ja tutaj bym się jeszcze pokusił o małą modernizacje i zamiast if dał: do { cout<<"Podaj "<<j+1<<" liczbe: __\b\b"; cin>>p[i].a.liczby[j]; if (p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49) { cout<<"Przekroczono zakres. Dostepne liczby z zakresu <1,49>\nWpisz jeszcze raz\n"; } }while(p[i].a.liczby[j]<1 || p[i].a.liczby[j]>49) Co pozwoli na poprawienie ewentualnej pomyłki bez ponownego uruchamiania.
  14. Glapa

    Programowanie

    Hejka ja dalej mecze się nad tym projektem... Wydaje mi się, że poczyniłem duże postępy ale mimo wszystko brakuje mi jeszcze jednej opcji ostatniej już, której bym potrzebował i jest to wykluczenie, jednego lub kilku odcinków z poprzednich tras podstawowych w celu wyznaczenia kolejnej trasy podstawowej. Poniżej zamieszczam kod (funkcja która powinna usuwać te połączenia zaznaczona na czerwono). I tutaj rodzi się moje pytanie/prośba czy wie ktoś lub ma chociaż pomysł na to jak tego dokonać ponieważ jak na razie ta funkcja nie działa :doh!: #include "stdafx.h" #include <iostream> #include <fstream> #define INFINITY 4194304 using namespace std; void printD(int n,long *d) { cout<<"Odleglosc:"; cout.width(10); cout<<d[n]; cout<<endl; } /* * Wyświetla najkrótszą trasę pomiedzy początkiem a końcem. * * dijkstra(int) musi być przynajmnije raz wywołana przed wyświetleniem */ void printPath(int dest,int *prev,long **dist) { if(prev[dest]!=-1) { dist[prev[dest]][dest]=0; printPath(prev[dest],prev,dist); } cout<<dest<<" "; } [color="red"]void wyklucz(int dest,int *prev,long **dist,int ile) { ile=0; if(prev[dest]!=-1) { for(int j=0;j<dest;j++) { if(dist[prev[dest]][j]>0&&dist[prev[dest]][j]<INFINITY) { ile++; } } if(ile>2) { dist[prev[dest]][dest]=0; wyklucz(prev[dest],prev,dist,ile); } else wyklucz(prev[dest],prev,dist,ile); } }[/color] void printBackup(int dest,int *prev) { if(prev[dest]!=-1) printBackup(prev[dest],prev); cout<<dest<<" "; } void get(int &u, int &v,int &w,int &e,long **dist,char *source) { ifstream plik; plik.open(source,ifstream::in); plik>>e; for(int i=0;i<e;++i) { plik>>u; plik>>v; plik>>w; dist[u][v]=w; } plik.close(); } void dijkstra(int s,int n,int e,int *prev,long *d,long **dist,int al) { int mini; int *visited; visited=new int[al]; for (int i=1;i<=n;++i) { d[i]=INFINITY; prev[i]=-1; // droga do i jeszcze nie znaleziona visited[i]=0; // i-ty element nie odwiedzony } d[s]=0; for(int k=1;k<=n;++k) { mini=-1; for(int i=1;i<=n;++i) if (!visited[i]&&((mini==-1)||(d[i]<d[mini]))) mini=i; visited[mini]=1; for(int i=1;i<=n;++i) { if(dist[mini][i]) { if(d[mini]+dist[mini][i]<d[i]) { d[i]=d[mini]+dist[mini][i]; prev[i]=mini; } } } } } int MAX(int a,int b) { if(a>b) return a; else return b; } int main(int argc, char *argv[]) { int u=0,v=0,w=0; //u- wierzchołek początkowy v- końcowy w- waga int e=0,n=0; //e- Ilość niezerowych krawędzi n- ilosc wierzchołków int ile=0,al; //ile - przechowuje ilość krawędzi wierzchołka aby nie zrywać połączenia przy blokowaniu krawędzi al- wielkosc tablic long **dist; // dist[i][j] odległość pomiędzy i,j jeżeli brak =0 long *d; // d[i] odległość pomiędzy początkiem, a wierzchołkiem i int *prev; // prev[i] wiechołek poprzedzający i na wyszukanej trasie int *temp; //zmienna zapasowa do wyznaczania trasy zaasowej ifstream plik; char source[1000]; cout<<"Podaj sciezke do pliku:\n"; cin>>source; plik.open(source,ifstream::in); if(plik.is_open()) { plik>>e; n=-1; for(int i=0;i<e;++i) { plik>>u>>v>>w; n=MAX(u,MAX(v,n)); } plik.close(); al=MAX(e,n); al++; d=new long[al]; prev=new int[al]; dist=new long*[al]; for(int i=0;i<al;i++) { dist[i]=new long[al]; } for(int i=0;i<al;++i) { for(int j=0;j<al;++j) { dist[i][j]=0; } } get(u,v,w,e,dist,source); dijkstra(1,n,e,prev,d,dist,al); temp=new int[al]; for(int i=0;i<al;i++) temp[i]=prev[i]; cout<<"Droga podstawowa: "; printPath(n,temp,dist); cout<<endl; printD(n,d); cout<<endl; dijkstra(1,n,e,temp,d,dist,al); cout<<"\nDroga zapasowa: "; printBackup(n,temp); cout<<endl; printD(n,d); get(u,v,w,e,dist,source); wyklucz(n,prev,dist,ile); cout<<endl; cout<<endl; dijkstra(1,n,e,prev,d,dist,al); for(int i=0;i<al;i++) temp[i]=prev[i]; cout<<"Droga podstawowa: "; printPath(n,temp,dist); cout<<endl; printD(n,d); cout<<endl; dijkstra(1,n,e,temp,d,dist,al); cout<<"\nDroga zapasowa: "; printBackup(n,temp); cout<<endl; printD(n,d); get(u,v,w,e,dist,source); int x =0; wyklucz(n,prev,dist,ile); cout<<endl; cout<<endl; dijkstra(1,n,e,prev,d,dist,al); for(int i=0;i<al;i++) temp[i]=prev[i]; cout<<"Droga podstawowa: "; printPath(n,temp,dist); cout<<endl; printD(n,d); cout<<endl; dijkstra(1,n,e,temp,d,dist,al); cout<<"\nDroga zapasowa: "; printBackup(n,temp); cout<<endl; printD(n,d); } else { cout<<"Blad otwarcia pliku.\n"; } cout<<endl; system("PAUSE"); return 0; }
  15. Glapa

    Programowanie

    ok coś mi sie udało ogarnąć z dużą pomocą wójka googla. Na chwilę obecną mam coś takiego: #include "stdafx.h" #include <stdio.h> #define GRAPHSIZE 2048 #define INFINITY GRAPHSIZE*GRAPHSIZE #define MAX(a, b) ((a > b) ? (a) : (b)) int e; /* The number of nonzero edges in the graph */ int n; /* The number of nodes in the graph */ long dist[GRAPHSIZE][GRAPHSIZE]; /* dist[i][j] is the distance between node i and j; or 0 if there is no direct connection */ long d[GRAPHSIZE]; /* d[i] is the length of the shortest path between the source (s) and node i */ int prev[GRAPHSIZE]; /* prev[i] is the node that comes right before i in the shortest path from the source to i*/ void printD() { int i; printf("Distances:\n"); for (i = 1; i <= n; ++i) printf("%10d", i); printf("\n"); for (i = 1; i <= n; ++i) { printf("%10ld", d[i]); } printf("\n"); } /* * Prints the shortest path from the source to dest. * * dijkstra(int) MUST be run at least once BEFORE * this is called */ void printPath(int dest) { if (prev[dest] != -1) printPath(prev[dest]); //wyznacza trase printf("%d ", dest); } void dijkstra(int s) { int i, k, mini; int visited[GRAPHSIZE]; for (i = 1; i <= n; ++i) { d[i] = INFINITY; prev[i] = -1; /* no path has yet been found to i */ visited[i] = 0; /* the i-th element has not yet been visited */ } d[s] = 0; for (k = 1; k <= n; ++k) { mini = -1; for (i = 1; i <= n; ++i) if (!visited[i] && ((mini == -1) || (d[i] < d[mini]))) mini = i; visited[mini] = 1; for (i = 1; i <= n; ++i) if (dist[mini][i]) if (d[mini] + dist[mini][i] < d[i]) { d[i] = d[mini] + dist[mini][i]; prev[i] = mini; } } } int main(int argc, char *argv[]) { int i, j; int u, v, w; FILE *fin = fopen("dist.txt", "r"); fscanf(fin, "%d", &e); for (i = 0; i < e; ++i) for (j = 0; j < e; ++j) dist[i][j] = 0; n = -1; for (i = 0; i < e; ++i) { fscanf(fin, "%d%d%d", &u, &v, &w); dist[u][v] = w; n = MAX(u, MAX(v, n)); } fclose(fin); dijkstra(1); printD(); printf("\n"); for (i = 1; i <= n; ++i) { printf("Path to %d: ", i); printPath(i); printf("\n"); } getchar(); return 0; } póki co nie jest to wersja optymalna bo nie bawiłem się w usuwanie zmiennych globalnych i ustalanie tablic dynamicznych bo dopiero co znalazłem jakiś sensowny algorytm który w dużej częsci mi sie przydał. Dodałem też funkcje, która wyznacza trasę. Teraz mam pytanie czy da sie w jakiś prosty sposób na wykluczenie tej wyznaczonej trasy z kolejnego sprawdzania?
×
×
  • Dodaj nową pozycję...