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);
}
Example #3
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;
}