#include static struct { int value1; int value2; int used; } data[] = { { 1, 2, 0 }, { 1, 3, 0 }, { 2, 3, 0 }, { 2, 4, 0 }, { 3, 4, 0 }, }; enum { DATA_SIZE = sizeof data / sizeof *data }; static int output[DATA_SIZE]; void traverse(int from, int to, int depth) { output[depth++] = from; int i; if (from == to) { for (i = 0; i < depth; i++) { if (i) { printf("-"); } printf("%d", output[i]); } printf("\n"); } else { for (i = 0; i < DATA_SIZE; i++) { if (!data[i].used) { data[i].used = 1; if (from == data[i].value1) { traverse(data[i].value2, to, depth); } else if (from == data[i].value2) { traverse(data[i].value1, to, depth); } data[i].used = 0; } } } } int main() { traverse(1, 3, 0); return 0; }