Esempio n. 1
0
File: avl.c Progetto: shijith/toy
void deletes(int n)
{
				struct node *par = 0;
				temp = root;
				par = find_pos(n, root);
				if(temp -> data == n) {
								if( par -> left == temp){
												if(temp -> right == 0)
																par ->left = temp -> left;
												else if(temp -> left == 0)
																par ->left = temp -> right;
												else {
																del_min();
												}
								} else if(par -> right == temp) {
												if(temp -> right == 0)
																par ->right = temp -> left;
												else if(temp -> left == 0)
																par ->right = temp -> right;
												else {
																del_min();
												}
								}	else {
												printf("root changed\n");
												if(root -> right == 0)
																root = root -> left;
												else
																del_min();

								}
								
				} 
				bf(par);
				
}
struct elem * del_min(struct elem *const e) {
	struct elem *tmp, *_e;
	if (!e) return NULL;
	_e = e;
	if (e->left) e->left = del_min(e->left); else {
		if (!(tmp = e->right)) tmp = e, _e = NULL; else *_e = *tmp;
		/* free(tmp); */
	}
	return post_del(_e);
}
Esempio n. 3
0
void print_min_pq(min_pq m, char *(to_string)(void *p), char *s) {
    min_pq temp = malloc(sizeof(m));
    temp->num = m->num;
    temp->items = malloc(sizeof(void *) * (temp->num + 1));
    int i;
    temp->compare = m->compare;
    for (i = 1; i < m->num + 1; i++) {
        SOCKET_BUNDLE bar = malloc(sizeof(SOCKET_BUNDLE));
        bar = m->items[i];
        //printf("%d\n", bar->num);
        temp->items[i] = m->items[i];
    }
    printf("\n***************printing %s priority queue****************\n", s);
    while (temp->num > 0) {
        item t = del_min(temp);
        to_string(t);
    }
    printf("*********************************************************\n\n");
}
int main(int argc, char *argv[]) {
	unsigned int T;
	size_t i, V, E, a, b, A, B, w;
	int64_t l, alt;
	struct vertex heap_elem, min;
	const struct pt *ptr;
	scanf("%u", &T);
	while (T--) {
		init();
		scanf("%zu%zu", &V, &E);
		for (i = 0; i < E; ++i) scanf("%zu%zu%ld", &a, &b, &l), pts[ne].v = b, pts[ne].l = l, pts[ne].next = adj[a], adj[a] = &pts[ne++], dist[a] = INF, dist[b] = INF;
		scanf("%zu%zu", &A, &B), dist[A] = 0, dist[B] = INF;
		ins((heap_elem.v = A, heap_elem.dist = 0, heap_elem));
		while (heap_size) {
			min = del_min();
			for (ptr = adj[min.v]; ptr; ptr = ptr -> next) if ((alt = dist[min.v] + ptr -> l) < dist[w = ptr -> v]) dist[w] = alt, ins((heap_elem.v = w, heap_elem.dist = alt, heap_elem));
		}
		if (INF == dist[B]) printf("NO\n"); else printf("%ld\n", dist[B]);
	}
	return 0;
}