Il calcolo combinatorio potrebbe essere d'aiuto:
codice:
#include <stdio.h>
typedef struct tagTriangle
{
unsigned int a;
unsigned int b;
unsigned int c;
} Triangle;
void InitTriangleArray(int *p)
{
p[0] = 0;
p[1] = 2;
p[2] = 4;
p[3] = 0;
p[4] = 1;
p[5] = 2;
p[6] = 2;
p[7] = 4;
p[8] = 3;
p[9] = 4;
p[10] = 5;
p[11] = 0;
}
int Adiacenti(Triangle *p1, Triangle *p2)
{
int k = 0;
if ( (p1->a == p2->a) )
k++;
if ( (p1->a == p2->b) )
k++;
if ( (p1->a == p2->c) )
k++;
if ( (p1->b == p2->a) )
k++;
if ( (p1->b == p2->b) )
k++;
if ( (p1->b == p2->c) )
k++;
if ( (p1->c == p2->a) )
k++;
if ( (p1->c == p2->b) )
k++;
if ( (p1->c == p2->c) )
k++;
return k >= 2 ? 1 : 0;
}
int main()
{
int k, y;
Triangle T1, T2;
unsigned int DimArray;
unsigned int triangles[12];
DimArray = (sizeof(triangles) / sizeof(triangles[0]));
InitTriangleArray(triangles);
k = 0;
y = k + 3;
while ( 1 )
{
if ( k == DimArray - 3 )
break;
T1.a = triangles[k];
T1.b = triangles[k+1];
T1.c = triangles[k+2];
while ( 1 )
{
if ( y == DimArray )
break;
T2.a = triangles[y];
T2.b = triangles[y+1];
T2.c = triangles[y+2];
if ( Adiacenti(&T1, &T2) )
{
printf("I triangoli (%d,%d,%d) e (%d,%d,%d) sono adiacenti\n",
T1.a, T1.b, T1.c, T2.a, T2.b, T2.c);
}
else
{
printf("I triangoli (%d,%d,%d) e (%d,%d,%d) non sono adiacenti\n",
T1.a, T1.b, T1.c, T2.a, T2.b, T2.c);
}
y += 3;
}
k += 3;
y = k + 3;
}
return 0;
}