begin process at 2008 07 20 09:21:37
1 213 150 membres
71 nouveaux aujourd'hui
14 166 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Dijkstra [ Algorithme / Maths ] (king_moez)

Dijkstra le 10/04/2007 20:13:29

king_moez
salut a tout , il y a t'il une personne qui peut me fournirune programme en C qui consiste a utiliser LA Methode de Dijkstra  

Merci d'avance

Re : Dijkstra le 10/04/2007 20:35:50

BruNews
(Admin CS)
Réponse acceptée !
Tu regardes ce qui te convient:
http://www.google.com/custom?domains=cppfrance.com&q=dijkstra&sa=Rechercher&sitesearch=cppfrance.com

ciao...
BruNews, MVP VC++

Re : Dijkstra le 11/04/2007 21:02:31

coucou747
Salut,

un truc en C qui peut ressembler (mais qui est probablement mauvais)

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char empty;
    char visited;
    int distance;
} Case;

#define MAXINT 2000

int __min(int a, int b){
    return (a<b)?a:b;
}

int distances_(Case ** c, int x, int y){
    int nombre=0;
    int i, j;
    int min=MAXINT;
    for (i=0;i<y;i++){
        for (j=0;j<x;j++){
            if (!c[i][j].visited){
                nombre++;
                if (c[i][j].distance<min){
                    min=c[i][j].distance;
                }
            }
        }
    }
    //printf("%d %d\n", min, nombre);

    for (i=0;i<y;i++){
        for (j=0;j<x;j++){
            if (c[i][j].distance==min){
                c[i][j].visited=1;
            }
        }
    }
    for (i=0;i<y-1;i++){
        for (j=0;j<x-1;j++){
            if (c[i][j].distance==min || c[i+1][j+1].distance==min){
                if (c[i+1][j].empty){
                    c[i+1][j].distance=__min(min+1, c[i+1][j].distance);
                }
                if (c[i][j+1].empty){
                    c[i][j+1].distance=__min(min+1, c[i][j+1].distance);
                }
            }
            if (c[i+1][j].distance==min || c[i][j+1].distance==min){
                if (c[i+1][j+1].empty){
                    c[i+1][j+1].distance=__min(min+1, c[i+1][j+1].distance);
                }
                if (c[i][j].empty){
                    c[i][j].distance=__min(min+1, c[i][j].distance);
                }
            }
        }
    }
    return nombre;
}

int distance(Case ** c, int x, int y){
    int max=0, r=1, i, j;
    while(r){
        r=distances_(c,x,y);
        //printf("%d\n", r);
    }
    for (i=0;i<y;i++){
        for (j=0;j<x;j++){
            if (c[i][j].distance>max){
                max=c[i][j].distance;
            }
        }
    }
    return max;
}

int main(){
    int x, y, i, j, c;
    Case ** cases;

    scanf("%d", &x);
    scanf("%d", &y);
    cases=(Case **)malloc(y*sizeof(Case *));
    for (i=0;i<y;i++){
        cases[i]=(Case *)malloc(x*sizeof(Case));
        for (j=0;j<x;j++){
            scanf("%d", &c);
            if (c==0){
                cases[i][j].empty=1;
                cases[i][j].visited=0;
                cases[i][j].distance=MAXINT;
            }else{
                cases[i][j].empty=0;
                cases[i][j].visited=0;
                cases[i][j].distance=0;
            }
            printf("%c", ((c==0)?' ':'#'));
        }
        printf("\n");
    }
    printf("result : %d\n\n", distance(cases, x, y));
    //on affiche les distances
    for (i=0;i<y;i++){
        for (j=0;j<x;j++){
            printf("%d ", cases[i][j].distance);
        }
        printf("\n");
    }
    return 0;
}



c'est une reponse a un sujet du concours fario (que j'ai faite pour m'entrainer)

tu peux t'en inspirer si tu veux... a mon avis, c'est pas trop ce que tu cherches...


In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)


Classé sous : dijkstra

Participer à cet échange

Livres en rapport

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Boutique

Boutique de goodies CodeS-SourceS