|
|
|
@ -0,0 +1,89 @@
|
|
|
|
|
/**
|
|
|
|
|
* SAE 2.02 - Exploration algorithmique d’un problème
|
|
|
|
|
* Prtie 1 / Exercice 4
|
|
|
|
|
* Extrait code C
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define NAME_MAX_LEN 40
|
|
|
|
|
#define NB_PTS_CARACT_MAX 10
|
|
|
|
|
|
|
|
|
|
typedef struct pointCaracteristique {
|
|
|
|
|
char nom[NAME_MAX_LEN];
|
|
|
|
|
struct pointCaracteristique **tPtsCaract;
|
|
|
|
|
int nbPtsCaract;
|
|
|
|
|
} PointCaracteristique, *Rue;
|
|
|
|
|
|
|
|
|
|
PointCaracteristique *reseau[NB_PTS_CARACT_MAX];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// BUT: Savoir si B est directement accessible depuis A
|
|
|
|
|
|
|
|
|
|
int isAccessDirect(PointCaracteristique *A, PointCaracteristique *B)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < A->nbPtsCaract; i++)
|
|
|
|
|
{
|
|
|
|
|
if (A->tPtsCaract[i] == B)
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// BUT: Savoir si B est accessible depuis A
|
|
|
|
|
|
|
|
|
|
// version récusrive
|
|
|
|
|
int isAccessREC(PointCaracteristique *A, PointCaracteristique *B)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < A->nbPtsCaract; i++)
|
|
|
|
|
{
|
|
|
|
|
if (isAccessDirect(A, B))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return isAccessREC(A->tPtsCaract[i], B);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// version itérative
|
|
|
|
|
int isAccessITE(PointCaracteristique *A, PointCaracteristique *B)
|
|
|
|
|
{
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
|
|
PointCaracteristique *ptsMarque[NB_PTS_CARACT_MAX];
|
|
|
|
|
int nbPtsMarque = 0;
|
|
|
|
|
|
|
|
|
|
PointCaracteristique *ptsTest = A;
|
|
|
|
|
|
|
|
|
|
// pour tout les points du point testé
|
|
|
|
|
for (i = 0; i < ptsTest->nbPtsCaract; i++)
|
|
|
|
|
{
|
|
|
|
|
// test si point déjà testé
|
|
|
|
|
for (int j = 0; j < nbPtsMarque; j++)
|
|
|
|
|
{
|
|
|
|
|
if (ptsTest == ptsMarque[j])
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// test si pour ce point le chemin est direct
|
|
|
|
|
if (isAccessDirect(ptsTest, B))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// le point viens d'être testé, il entre dans la liste
|
|
|
|
|
ptsMarque[nbPtsMarque++] = ptsTest;
|
|
|
|
|
|
|
|
|
|
// on teste ensuite le prochain
|
|
|
|
|
ptsTest = ptsTest->tPtsCaract[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|