About me

My photo
Surabaya
too much to explain in words.. you may think that you know me, but sorry to say, you are WRONG..! i bet you dont know me AT ALL.. my life is amazing..and i love it damn much..

Monday, November 16, 2009

algoritma warshall

Algoritma Floyd Warshall


Code:

void fwarsh(int nn, double *cmat, double **dist_mat, int **pred_mat)

{

double *dist;

int *pred;

int i,j,k; //loop counters



//inisialisasi struktur data

dist = (double *)malloc(sizeof(double) * nn * nn);

pred = (int *)malloc(sizeof(int) * nn * nn);

memset(dist, 0, sizeof(double)*nn*nn);

memset(pred, 0, sizeof(int)*nn*nn);



//inisialisasi algoritma

for (i=0; i < nn; i++) {

for (j=0; j < nn; j++) {

if (cmat[i*nn+j] != 0.0)

dist[i*nn+j] = cmat[i*nn + j];

else

dist[i*nn+j] = HUGE_VAL;



if (i==j) //diagonal case

dist[i*nn+j] = 0;



if ((dist[i*nn + j] > 0.0) && (dist[i*nn+j] < HUGE_VAL))

pred[i*nn+j] = i;

}

}



//Pengulangan Utama

for (k=0; k < nn; k++) {

for (i=0; i < nn; i++) {

for (j=0; j < nn; j++) {

if (dist[i*nn+j] > (dist[i*nn+k] + dist[k*nn+j])) {

dist[i*nn+j] = dist[i*nn+k] + dist[k*nn+j];

pred[i*nn+j] = pred[k*nn+j];

//printf("updated entry %d,%d with %d\n", i,j, dist[i*nn+j]);

}

}

}

}



/* //Cetak Hasil

for (i=0; i < nn; i++) {

for (j=0; j < nn; j++)

printf("%g ", dist[i*nn+j]);

printf("\n");

} */



if (dist_mat)

*dist_mat = dist;

else

free(dist);



if (pred_mat)

*pred_mat = pred;

else

free(pred);



return;

} //end of fwarsh()









Joined: Mon Mar 31, 2008 6:50 pm

Posts: 840

Re: Algoritma Floyd Warshall



dulugondrong wrote:



Code:

void fwarsh(int nn, double *cmat, double **dist_mat, int **pred_mat)

{

double *dist;

int *pred;

int i,j,k; //loop counters



//inisialisasi struktur data

dist = (double *)malloc(sizeof(double) * nn * nn);

pred = (int *)malloc(sizeof(int) * nn * nn);

memset(dist, 0, sizeof(double)*nn*nn);

memset(pred, 0, sizeof(int)*nn*nn);



//inisialisasi algoritma

for (i=0; i < nn; i++) {

for (j=0; j < nn; j++) {

if (cmat[i*nn+j] != 0.0)

dist[i*nn+j] = cmat[i*nn + j];

else

dist[i*nn+j] = HUGE_VAL;



if (i==j) //diagonal case

dist[i*nn+j] = 0;



if ((dist[i*nn + j] > 0.0) && (dist[i*nn+j] < HUGE_VAL))

pred[i*nn+j] = i;

}

}



//Pengulangan Utama

for (k=0; k < nn; k++) {

for (i=0; i < nn; i++) {

for (j=0; j < nn; j++) {

if (dist[i*nn+j] > (dist[i*nn+k] + dist[k*nn+j])) {

dist[i*nn+j] = dist[i*nn+k] + dist[k*nn+j];

pred[i*nn+j] = pred[k*nn+j];

//printf("updated entry %d,%d with %d\n", i,j, dist[i*nn+j]);

}

}

}

}



/* //Cetak Hasil

for (i=0; i < nn; i++) {

for (j=0; j < nn; j++)

printf("%g ", dist[i*nn+j]);

printf("\n");

} */



if (dist_mat)

*dist_mat = dist;

else

free(dist);



if (pred_mat)

*pred_mat = pred;

else

free(pred);



return;

} //end of fwarsh()

No comments:

Post a Comment