Пример #1
0
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;
}
Пример #3
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;
			}
		}
	}
}
Пример #4
0
void Union(int x,int y,int *parent)
{
	int xset=findparent(parent,x);
	int yset=findparent(parent,y);
	parent[xset]=yset;
}
Пример #5
0
int findparent(int* parent,int i)
{
	if(parent[i]==-1)
	return i;
	return findparent(parent,parent[i]);
}