Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: konwersja kodu z c++ na php
Forum PHP.pl > Forum > PHP
gulgul
Problem taki jak w temacie
mam kod programu oparty na algorytmie Dijkstry oraz na klasach i stosach
Kod

#include <iostream>
  
   using namespace std;
  
   const int MAX_N = 100; // maksymalna ilość wierzchołków w grafie
   const int INF = 2147483647;
  
   struct TNode
   {
     int node;            // numer wierzchołka
     int weight;          // waga krawędzi
     struct TNode * next; // następny element listy
   };
  
   main()
   {
     int i,j,u,n,m,x,y,z,v0;
     int d[MAX_N+1],p[MAX_N+1],heap[MAX_N+1],hp[MAX_N+1];
     bool QS[MAX_N+1];
     struct TNode *L[MAX_N+1],*pw;
    
   // Inicjujemy struktury danych
  
     for(i = 1; i <= MAX_N; i++)
     {
       d[i]  = INF;         // koszty dojścia
       p[i]  = 0;           // poprzednik na ścieżce
       QS[i] = false;       // przynależność do Q (false) lub S (true)
       L[i]  = NULL;        // lista sąsiedztwa
       hp[i] = heap[i] = i; // kopiec
     }
     n = 0;
  
   // Odczytujemy dane wejściowe
  
     cin >> v0; // odczytujemy numer wierzchołka startowego
     cin >> m;  // odczytujemy ilość krawędzi
     for(i = 1; i <= m; i++)
     {
       cin >> x >> y >> z; // odczytujemy krawędź
       if(x > n) n = x;
       if(y > n) n = y;
       pw = new TNode;
      
       pw->next = L[x];
       pw->node = y;
       pw->weight = z;
       L[x] = pw;
     }
     cout << endl;
  
     int hlen  = n; // ilość wierzchołków w kopcu
    
     d[v0] = 0;     // koszt dojścia dla v0 jest zerowy
  
   // Odtwarzamy własność kopca
  
     x = heap[1];
     heap[1] = heap[v0];
     heap[v0] = x;
      
     hp[v0] = 1; hp[1] = v0;
      
     for(i = 1; i <= n; i++)
     {
  
       u = heap[1];
      
   // Usuwamy korzeń i odtwarzamy własność kopca
  
       int parent;
      
       heap[1] = heap[hlen];
       hlen--;
      
       hp[heap[1]] = parent = 1;
       while(true)
       {
         int left = parent + parent;
         int right = left + 1;
        
         if(left > hlen) break;
  
         int dmin = d[heap[left]];
         int pmin = left;
  
         if((right <= hlen) && (dmin > d[heap[right]]))
         {
           dmin = d[heap[right]]; pmin = right;
         }
         if(d[heap[parent]] <= dmin) break;
        
         x = heap[parent];
         heap[parent] = heap[pmin];
         heap[pmin] = x;
        
         hp[heap[parent]] = parent;
         hp[heap[pmin]] = pmin;
        
         parent = pmin;
       }
      
   // znaleziony wierzchołek przenosimy do S
  
       QS[u] = true;
  
   // Modyfikujemy odpowiednio wszystkich sąsiadów z Q
      
       pw = L[u];
       while(pw)
       {
         if(!QS[pw->node] && (d[pw->node] > d[u] + pw->weight))
         {
           d[pw->node] = d[u] + pw->weight; p[pw->node] = u;
  
   // Po zmianie d[v] odtwarzamy własność kopca
  
           int child = hp[pw->node];
           while(child > 1)
           {
             parent = child / 2;
             if(d[heap[parent]] <= d[heap[child]]) break;
            
             x = heap[parent];
              heap[parent] = heap[child];
               heap[child] = x;
              
             hp[heap[parent]] = parent;
              hp[heap[child]] = child;
              
             child = parent;
           }
         }
         pw = pw->next;
       }
     }
  
   // Gotowe, wyświetlamy wyniki
  
     int stos[MAX_N],ws;
    
     for(i = 1; i <= n; i++)
     {
       cout << i << ": ";
       ws = 0; j = i;
  
   // Wierzchołki z końca ścieżki umieszczamy na stosie
  
       while(j)
       {
         stos[ws++] = j; j = p[j];
       }
  
   // Wypisujemy kolejne wierzchołki ze szczytu stosu
  
       while(ws) cout << stos[--ws] << " ";
      
   // Wypisujemy koszt dojścia
  
       cout << "#" << d[i] << endl;    
     }        
     char s[1];
     cin.getline(s,1);
     cin.getline(s,1);
   }


największy problem tkwi w tym(mam nadzieję, że tylko w tym), że nie potrafię zadeklarować odpowiedniej klasy w php: A przede wszystkim z : struct TNode * next;

Kod
  
   struct TNode
     {
       int node;            // numer wierzchołka
       int weight;          // waga krawędzi
       [b]struct TNode * next;[/b] // następny element listy
     };


będę bardzo wdzięczny gdy ktoś mi w tym pomoże. Moje dalsze rozumowanie nie widzi już innych problemów w konwersji kodu jak tylko odpowiednio zmienić zmienne(oznaczenia). Jeżeli jestem w błędzie to też proszę o pomoc.
webdice
  1. <?php
  2. class Klasa
  3. {
  4. public $zmienna = 'test';
  5.  
  6. public function Funkcja ()
  7. {
  8. print $this -> zmiennna;
  9. }
  10. }
  11. ?>
nevt
  1. <?php
  2. class TNode
  3. {
  4. public $node;
  5. public $weight;
  6. public $next;
  7. }
  8.  
  9. $a = new TNode();
  10. $a->node = 1;
  11. $a->weight = 5;
  12. $a->next = new TNode();
  13. //albo
  14. $b = new TNode();
  15. $a->next = $b;
  16. ?>

obiekty w PHP zawsze idą przez referencję. to oczywiście tylko skrajnie prosty przykład. Właściwa klasa pominna mieć konstruktor, metody get i set (gdzie mozesz sobie zrobić kontrole typów i zakresów) a właściwości powinny być prywatne...
powodzenia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.