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;
}