int prtsrtpath(struct graph *g, int src, int dest) { struct enode *e; struct vnode *v; int i, ndx, level, curv; int *pred; if( (f = init_fifo(g->sz)) == NULL) { perror("prtsrtpath: fifo Malloc error"); return(-1); } if( (pred = malloc(g->sz*sizeof(int))) == NULL) { perror("prtsrtpath: pred value Malloc error"); return(-1); } //Set all preds to -1 for( i = 0; i < g->sz; i++) pred[i] = -1; //Set all visited to 0 for( i = 0; i < g->sz; i++) g->vn[i].visited = 0; curv = src; g->vn[curv].visited = 1; level = 1; insert_fifo(curv, &f); while(f->sz > 0) { extract_fifo(&ndx, f); v = &(g->vn[ndx]); level = v->visited + 1; e = v->edge; while( e != NULL) { if( !g->vn[e->vndx].visited) { g->vn[e->vndx].visited = level; pred[e->vndx] = ndx; insert_fifo(e->vndx, &f); } e = e->next; } } free(f); prtpred(src, dest, pred); free(pred); return(0); }
int bftraversal(struct graph *g) { int i; struct enode *e; struct vnode *v; int ndx; int level; if( (f = init_fifo(g->sz)) == NULL) { perror("bfttraversal: fifo Malloc error"); return(-1); } //Reset all visited fields to 0 for( i = 0; i < g->sz; i++) g->vn[i].visited = 0; i = 0; printf("\n"); while(i != -1) { g->vn[i].visited = 1; level = 1; insert_fifo(i,&f); while(f->sz > 0) { extract_fifo(&ndx,f); v = &(g->vn[ndx]); printf("%d(%d) ", v->item, v->visited); level = v->visited + 1; e = v->edge; while( e != NULL) { if( !g->vn[e->vndx].visited) { g->vn[e->vndx].visited = level; insert_fifo(e->vndx,&f); } e = e->next; } } i = unvisited(g); printf("\n"); } free(f); return(0); }
/*for testing fifos*/ int create_fifo(char * name){ int currfd = find_new_fifo_fd(); if (currfd == -1 ){ printf("No more fifos can be created.\n"); return -1; } fifo_table[currfd].fd = currfd;/*cabeza*/ iNode * node = insert_fifo(name,0,NULL); /*fifo_table[currfd].file = (char *)node->data.direct_blocks[0];*/ fifo_table[currfd].file = malloc(MAX_FIFO_SIZE); fifo_table[currfd].curr_size = node->data.direct_blocks[1]; semItem * sem = malloc(sizeof(semItem)); sem->value = 0; semget_in_kernel(sem); fifo_table[currfd].sem_key = sem->key; if (fifo_table[currfd].sem_key == -1){ printf("Not enouth space for more semaphores\n"); return -1; } fifoCount++; return fifo_table[currfd].fd; }