Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int minDistance(int D[], int S[])
- {
- // Initialize min value
- int min = 150, min_index;
- for (int i = 0; i < nnod; i++){
- //cout << min_index;
- if (S[i] == 0 && D[i] <= min){
- min = D[i];
- min_index = i;
- }
- }
- return min_index;
- }
- int* Dijkstra (int mat[nnod][nnod],int sursa){
- int i, j, k;
- int lungmax = 150;
- int *S = (int*)malloc(nnod * sizeof(int));
- int *D = (int*)malloc(nnod * sizeof(int));
- int *V = (int*)malloc(nnod * sizeof(int));
- for (i = 0; i < nnod; i++){
- S[i] = 0;
- // nod neselectat
- D[i] = lungmax;
- // distantele minime de la sursa
- /*if (D[i] < lungmax)
- V[i] = i;
- // initializeaza vecinii
- else
- V[i] = 0;
- */}
- //S[sursa] = 1;
- // selecteaza nodul sursa
- D[sursa] = 0;
- //cout << mat[sursa][1] << '\n';
- for ( i = 0; i < nnod; i++){
- S[sursa] = 1;
- for (j = 0; j < nnod; j++) {
- if(mat[sursa][j] != 0 && mat[sursa][j] != 150) {
- // recalculeaza distantele
- if(sursa == 0)
- cout << j << "kl" << endl;
- //cout << "dada\n";
- if ((D[sursa] + mat[sursa][j] < D[j])){
- D[j] = D[sursa] + mat[sursa][j];
- V[j] = V[sursa];
- // modifica tabela de dirijare
- }
- if(sursa == 0)
- cout << j << "k\n";
- }
- sursa = minDistance(D,S);
- }
- }
- return D;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement