need correction on algo fast

part1
Alexandre AGOSTINHO 2 years ago
parent b492ee29e1
commit f927a5f1c4

@ -18,14 +18,15 @@ PointCaracteristique *reseau[NB_PTS_CARACT_MAX];
// BUT: Savoir si B est directement accessible depuis A
int isAccessDirect(PointCaracteristique A, PointCaracteristique B)
int isAccessDirect(PointCaracteristique *A, PointCaracteristique *B)
{
for (int i = 0; i < A.nbPtsCaract; i++)
for (int i = 0; i < A->nbPtsCaract; i++)
{
if (A.tPtsCaract[i] == &B)
if (A->tPtsCaract[i] == B)
{
return 1;
}
}
return 0;
}
}

@ -33,7 +33,7 @@ int isAccessDirect(PointCaracteristique *A, PointCaracteristique *B)
// BUT: Savoir si B est accessible depuis A
// version récusrive
// version recusrive
int isAccessREC(PointCaracteristique *A, PointCaracteristique *B)
{
for (int i = 0; i < A->nbPtsCaract; i++)
@ -50,7 +50,7 @@ int isAccessREC(PointCaracteristique *A, PointCaracteristique *B)
return 0;
}
// version itérative
// version iterative
int isAccessITE(PointCaracteristique *A, PointCaracteristique *B)
{
int i = 0;
@ -60,10 +60,10 @@ int isAccessITE(PointCaracteristique *A, PointCaracteristique *B)
PointCaracteristique *ptsTest = A;
// pour tout les points du point testé
// pour tout les points du point teste
for (i = 0; i < ptsTest->nbPtsCaract; i++)
{
// test si point déjà testé
// test si point deja teste
for (int j = 0; j < nbPtsMarque; j++)
{
if (ptsTest == ptsMarque[j])
@ -78,7 +78,7 @@ int isAccessITE(PointCaracteristique *A, PointCaracteristique *B)
return 1;
}
// le point viens d'être testé, il entre dans la liste
// le point viens d etre teste, il entre dans la liste
ptsMarque[nbPtsMarque++] = ptsTest;
// on teste ensuite le prochain
@ -86,4 +86,38 @@ int isAccessITE(PointCaracteristique *A, PointCaracteristique *B)
}
return 0;
}
}
int isInTab(PointCaracteristique *P, PointCaracteristique **TabP, int lenTabP)
{
for (int i; i < lenTabP; i++)
{
if (TabP[i] == P)
{
return 1;
}
}
return 0;
}
// version rapide
int isAccess(PointCaracteristique *A, PointCaracteristique *B, PointCaracteristique **ptsMarque, int *nbPtsMarque)
{
for (int i = 0; i < A->nbPtsCaract; i++) // erreur
{
if (! isInTab(A, ptsMarque, *nbPtsMarque))
{
if (isAccessDirect(A, B))
{
return 1;
}
else
{
return isAccess(A->tPtsCaract[i], B, ptsMarque, nbPtsMarque); // erreur
}
}
ptsMarque[*nbPtsMarque++] = A;
}
return 0;
}

Binary file not shown.

@ -23,11 +23,26 @@
\subsection{Question 3}
\par\quad
\par\quad Pour savoir si A est accessible directement depuis le point B, il suffit juste de regarder si B se trouve dans le tableau des points caractéristiques accessibles directment.
\par\quad Voici le code correspondant :
\lstinputlisting[language=C,firstline=21,lastline=31]{code/p1e3.c}
\subsection{Question 4}
\par\quad
\par\quad Pour savoir si B est accessible depuis A, directement ou non (par une ou plusieurs rues), il est possible de répéter récursivement la fonction précédante. Ainsi, elle va tester chaque point independamment et si un chemain direct est trouvé, c'est que il y à forcément un chemain qui rend B accessible.
\par\quad Voici le code correspondant :
\lstinputlisting[language=C,firstline=36,lastline=51]{code/p1e4.c}
\par\quad Voici maintenant une ébauche de travail qui visait à créé une version itérative de cette fonction :
\lstinputlisting[language=C,firstline=54,lastline=89]{code/p1e4.c}
\par\quad Je me suis rendu compte que je n'arrivait pas à pensé l'algorithme autrement que récursivement, c'est pourquoi j'ai décidé de mettre cette ébauche de côté. \\
\quad Neanmoin, il est quand même possible de réutiliser la partie de code qui teste si un point à déjà été testé. Ceci diviserait, par chaque points testé, la complexité de cette algorithme.
\par\quad Voici maintenant une ébauche de travail qui visait à créé une version itérative de cette fonction :
\lstinputlisting[language=C,firstline=91,lastline=123]{code/p1e4.c}
\subsection{Question 5}

Loading…
Cancel
Save