ALGORITHME DE DJIKSTRA

WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 - 22 juil. 2008 à 22:22
ootbtdkg2 Messages postés 11 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 20 septembre 2008 - 20 sept. 2008 à 14:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47394-algorithme-de-djikstra

ootbtdkg2 Messages postés 11 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 20 septembre 2008
20 sept. 2008 à 14:39
slt,
je voudrais te demander si l'algorithme de djikstra tient compte des cycles possibles dans les suites d'arcs à 2 sommets en cycles multiples co-cycliques ou non ?
parce que je suis en train de présenter la résolution totale de matrices quelconques quelquesoit les fonctionneles ou équations indéterminées présentes; en rapport avec la résolution de nombreux problèmes dont notamment le jeu d'échecs! et je développe présentement ! un algorithme et un code source pour le calcul de toutes les positions au jeu d'échecs en tenant compte des matrices et non de l'allocation dynamique contiguë de mémoire qui de ce fait de contigüité n'est pas optimale étant entendu que la mémoire allouable max pour un processus reste équivalente !!!!! de plus ! l'aspect visuel directement représentable des matrices permet plus facilement de déterminer les commutativités, asymétries, cycles ou itérations redondantes plus aisément !!!!! surtout lorque l'on est en mode manuel !!!!! avec retour de la commande shell au programmeur pour décision litigieuse !!!!! à résoudre !!!!!
confère mes pages à ootbtdkg2 pour plus d'infos !!!!!
cordialement,
considérations,
didkac
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
25 juil. 2008 à 13:33
Brunews:
On s'en fout un peu du cycle perdu, c'est vraiment pas dans une portion critique du code.
Par contre du code chiant à lire, je trouve ca plus critique.
C'est vrai que quelque chose comme
if (q==1) // traitement 1
else if (q==2) // traitement 2
else {
printf/scanf
}
aurait été un poil meilleur, mais bon l'idée c'était surtout de pas écrire de goto la ou un if/else aurait suffit..

Mais je connais ton opinion la dessus, pas la peine de continuer le débat sur un sujet ou chacun à des arguments ...
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juil. 2008 à 20:10
scanf("%d", &n) ne peut qu'accepter un nombre. Si ce n'est pas un nombre, la valeur de n avant l'appel sera conservé.
Suffit donc d'initialiser n à -1 par exemple. Ça ne passera pas le test des bornes et un nouveau nombre sera redemandé, si dans une boucle.
Toujours aucun besoin de test supplémentaire.
Maintenant, si l'utilisateur entre une chaine comme suit: 12%?231, seul les premiers caractères seront prit. Si on tien compte de ce cas, un test sur l'ensemble de la chaine peut devoir s'appliquer. Cependant, sur un projet relativement modeste ou spécialisé (qui n'a pas à traiter ce genre de chose), ce genre de test n'est pas très important, car, de toute façon, si le nombre créé par les premiers caractères dépasse les bornes, ça ne passera toujours pas le test donc aucun débordement tampon possible (résultat (peut-être) faussé cependant).

Ensuite, un caractère, quel qu'il soit vaut toujours une valeur numérique/hexadécimal étant donnée que c'est ce qu'il est. Entre '*' 'a' '$' ou ce que tu veux à la saisie, tu pourras toujours l'utiliser en tant que valeur numérique.
Coté ergonomique (pour l'utilisateur), je te l'accorde, ce n'est pas très chic mais coté logiciel, on s'en fout.
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
24 juil. 2008 à 19:47
oui t'a raison SAKingdom
si on met 0 ça donnera rien et si tu ne met pas un chiffre tu met un a ou * t'as essayé?
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juil. 2008 à 19:16
"ne passera pas le test de confirmation"

Quand je parle du test de confirmation ici, je parle du test pour confirmer que le nombre entré est entre 0 et 19 (la représentation entière de 'a' étant 97, (menfin la représentation... ce que vaut réellement 'a') ça ne passera logiquement pas).
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
24 juil. 2008 à 19:11
Ce n'est pas un caractère que l'on test ici mais un entier. Sera TOUJOURS numérique peu-importe que l'utilisateur entre 3 ou 'a'. Si l'utilisateur entre 'a', la valeur sera simplement la représentation numérique du caractère 'a' qui, de toute façon, ne passera pas le test de confirmation. Ce qu'il faut tester ici c'est si les bornes sont respectées (entre 0 et 19 étant donnée que la matrice est de 20 par 20).

Cependant, je le redis encore:
for(i=1;i<=n;i++)
À moins que ce ne soit voulu (je ne vois nul part où sont utilisées les cases t[0][x] ni t[x][0], même chose pour tout les autres tableau d'ailleurs), un tableau commence toujours à l'index 0 et se termine à nombre_delement_total-1 donc:
for(i=0;i<n;i++)
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
24 juil. 2008 à 16:11
printf("n=");
scanf("%d",&n);
a:
...

et si ce qu'on a mi c'est pas un numero??

il faut verifié si &n est 0-9
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 juil. 2008 à 14:01
Tabou anti goto amène à tester q plusieurs fois, quel bennef...

...
while(q != 1 && q != 2);
on ne sait toujours pas sur quel traitement aller, faut retester q.

choix:
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d", &q);
if(q == 1) goto manu;
if(q != 2) goto choix;
// ICI TRAITEMENT choix 2
....
manu:
....

Les tabous, faut les laisser aux sectes.
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
23 juil. 2008 à 21:58
do/while

int q;
do {
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d", &q);
} while(q != 1 && q != 2);
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
23 juil. 2008 à 14:01
Un projet d'école avec des goto ?
surprenant...
D'ailleurs ce code fourmille de trucs amusants (genre t'as du mal avec l'orthographe de dijkstra, o=o+1...)

Par contre ca c'est n'importe quoi:
# a:
# printf(" pour avoir la matrice manualement tappez '1' \n\n");
# printf(" pour avoir la mtrice automatiquement tappez '2' \n");
# scanf("%d",&q);
# if(q!=1 && q!=2)
# {
# goto a;
# }
Jveux bien admettre que goto ca puisse etre parfois envisagé dans de tres rares cas (et encore) mais si tu veux l'utiliser partout fais du basic plutot...
int q = -1;
while (q != 1 && q != 2)
{
// note les corrections d'orthographe au passage.
// Si c'est un truc que tu dois rendre, j'imagine que les profs préfèrent une orthographe correcte...
// D'ailleurs la c'est même pas une question d'orthographe mais de relecture
printf(" pour avoir la matrice manuellement tapez '1' \n\n");
printf(" pour avoir la matrice automatiquement tapez '2' \n");
scanf("%d",&q);
}
Chavenay Messages postés 1 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 23 juillet 2008
23 juil. 2008 à 10:03
Bonjour, le nom djickstra est mal orthographié. C'est Dijkstra.
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
22 juil. 2008 à 22:43
"c'est pas "void main()" c'est plutot "int main()""
Ce n'est pas très grave.

"le "clrscr();" dans la "int main" ça doit etre "int clrscr();""
Hein ??? Tu repostes la même chose sur chacune de ses sources. Pourquoi veux tu remplacer un appel de fonction par un prototype ? L'appel de clrscr est justifié ici. Il efface l'affichage d'intro.

Aussi je vois partout dans le code (pareil pour tes autres sources d'ailleurs):
for(i=1;i<=n;i++)

C'est voulu ? Parce que sinon, depuis quand un tableau commence à l'index 1 et se termine à l'index nombre_delements_total ?
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
22 juil. 2008 à 22:22
salut

dans la ligne N° 8 void main()

c'est pas "void main()" c'est plutot "int main()" et le "clrscr();" dans la "int main" ça doit etre "int clrscr();"
Rejoignez-nous