int iscycle(struct graph *g) { int *parent=(int *)malloc(sizeof(int)*(g->v)); int i; for(i=0;i<g->v;i++) parent[i]=-1; for(i=0;i<g->e;i++) { int x=findparent(parent,g->array[i].src); int y=findparent(parent,g->array[i].dest); if(x==y) return 1; Union(x,y,parent); } return 0; }
int main(){ char s[1000], path[1000]; int ct = 0, i; while(scanf("%s", s) > 0){ if(s[0] == '(' && s[1] == ')'){ qsort(node, ct, sizeof(struct data), compare); /*for(i = 0; i < ct; i++) printf("%s %d %d\n", node[i].pos, node[i].l, node[i].num);*/ if(isvalid) for(i = 0; i < ct; i++) isvalid &= findparent(i); if(isvalid){ for(i = 0; i < ct; i++){ if(i) putchar(32); printf("%d", node[i].num); } putchar(10); } else puts("not complete"); ct = 0; isvalid = 1; continue; } int num; sscanf(s, "(%d,%s)", &num, path); int l = strlen(path) - 1; path[l] = 0; node[ct].num = num, strcpy(node[ct].pos, path), node[ct++].l = l; } return 0; }
void makeheap(int n) { int i, j, k, l, temp; //i = counter, j = number of last leaves, k = number of data for(i = 0; i < n; i++){ printf("input data: "); scanf("%d", &A[i]); k = i; l = findparent(i); while(1){ if(A[k] < A[l]){ temp = A[k]; A[k] = A[l]; A[l] = temp; k = l; l = findparent(l); } else{ break; } } } }
void Union(int x,int y,int *parent) { int xset=findparent(parent,x); int yset=findparent(parent,y); parent[xset]=yset; }
int findparent(int* parent,int i) { if(parent[i]==-1) return i; return findparent(parent,parent[i]); }