#include #include struct e { int dest; struct e *link; }; typedef struct e edge_t; typedef struct n { int vis; edge_t *e; } node_t; node_t *g; int N, M; int *drum, lg = 0; void cauta(int src, int dest) { if (src == dest) {// tipareste int i; for (i = 0; i < lg; ++i) printf("%d->", drum[i]); printf("%d\n", dest); } else { edge_t *e; drum[lg++] = src; // push g[src].vis = 1; for (e = g[src].e; e; e = e->link) if (g[e->dest].vis) cauta(e->dest,dest); g[src].vis = 0; lg--; //pop } } int main(void) { edge_t *e; int i = 0, src, dest; printf("nr de noduri? "); scanf("%d", &N); g = calloc(N, sizeof(node_t)); drum = malloc(N * sizeof(int)); printf("nr de muchii ? "); scanf("%d", &M); for (i = 0; i < M; ++i) { scanf("%d%d", &src, &dest); e = malloc(sizeof(edge_t)); e->dest = dest; e->link = g[src].e; g[src].e = e; } printf("nodul initial si final ? "); scanf("%d%d", &src, &dest); cauta(src, dest); return 0; }