Pagini recente » Cod sursa (job #1393152) | Cod sursa (job #2103737)
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node
{
int nod;
struct _Node *next;
} Node;
Node *p[250005];
int cycle[500001], sizeOfCycle, n, m, counter;
void addToCycle(int i)
{
cycle[++sizeOfCycle] = i;
}
void bulaneala(int i, int j)
{
Node *aux;
Node *q = p[i];
if(i != j && q->next != p[i])
{
while(q->next->nod != j)
{
q = q->next;
}
aux = q->next;
q->next = q->next->next;
aux->next = NULL;
q = p[j];
while(q->next->nod != i)
{
q = q->next;
}
aux = q->next;
q->next = q->next->next;
aux->next = NULL;
}
else if(q->next != p[i])
{
while(q->next->nod != j)
{
q = q->next;
}
aux = q->next;
q->next = q->next->next;
aux->next = NULL;
}
}
void adaugare_dupa(Node *p, int valoare)
{
Node *q=(Node*)malloc(sizeof(Node));
q->next=p->next;
q->nod=valoare;
p->next=q;
}
void cicluEulerian(int i)
{
int j;
Node *q = p[i]->next;
while(q != p[i] && q != NULL)
{
/* Node *r;
for(j = 1; j <= n; j++)
{
r = p[j]->next;
while(r != p[j])
{
printf("%d ", r->nod);
r = r->next;
}
printf("\n");
}
printf("\n");
printf("%d %d asta e muchia de o bulanesti\n", i, q->nod);
printf("%d asta e nodu\n", q->nod); */
bulaneala(i, q->nod);
cicluEulerian(q->nod);
q = q->next;
}
addToCycle(i);
}
int main()
{
int i, x, y;
Node *q;
FILE *f = fopen("ciclueulerian.in", "r");
FILE *g = fopen("ciclueulerian.out", "w");
fscanf(f, "%d%d", &n, &m);
counter = m-1;
for(i = 1; i <= n; i++)
{
p[i] = (Node*)malloc(sizeof(Node));
p[i]->next = p[i];
p[i]->nod = 0;
}
for(i = 1; i <= m; i++)
{
fscanf(f, "%d%d", &x, &y);
if(x != y)
{
adaugare_dupa(p[x], y);
adaugare_dupa(p[y], x);
}
else adaugare_dupa(p[x], x);
}
cicluEulerian(1);
if(sizeOfCycle >= m)
{
for(i = 1; i <= m; i++)
fprintf(g, "%d ", cycle[i]);
}
else fprintf(g, "-1");
return 0;
}