Example #1
0
int Graph::traverse_graph( ExonNode * current_node, vector<ExonNode *> &path, vector<Path> &records, int origin){

	if (origin!=EXON_NO_INFO) {
		if (current_node->origin!=EXON_NO_INFO &&
			current_node->origin!=origin){
			return 0;
		}
	}

	if (current_node->origin!=EXON_NO_INFO) origin=current_node->origin;

	path.push_back(current_node);

	if (current_node->out_nodes.size()==0){
		records.push_back(Path(path));
	}
	else {
		for (auto i=current_node->out_nodes.begin();
			 i!=current_node->out_nodes.end();
			 i++){
			traverse_graph((*i), path, records, origin);
		}
	}
	path.pop_back();
	return 0;
}
Example #2
0
bool traverse_graph( int graph[100][101],int start,int marcacao[100] ){
  if ( marcacao[start] == CINZA )
    return false;
  else{
    marcacao[start]= CINZA;
    for ( int i=0; i < graph[start][100]; i++ ){
      traverse_graph( graph, graph[start][i], marcacao);
    }
  }
}
Example #3
0
int Graph::get_all_paths(vector<Path> & records){
	records.clear();
	vector<ExonNode *> starting_nodes;
	starting_nodes=get_starting_nodes();
	vector<ExonNode *> path;
	for (auto i =starting_nodes.begin(); i!=starting_nodes.end(); i++){
		traverse_graph((*i),  path, records, (*i)->origin);
	}
	return 0;
}
Example #4
0
	~FAO_DAG() {
		// For timing.
		printf("forward_evals=%i, avg_forward_eval_time=%e\n", forward_evals,
			total_forward_eval_time/forward_evals);
		printf("adjoint_evals=%i, avg_adjoint_eval_time=%e\n", adjoint_evals,
			total_adjoint_eval_time/adjoint_evals);
		/* Deallocate input and output arrays on each node. */
		auto node_fn = [](FAO* node) {node->free_data();};
		traverse_graph(node_fn, true);
	}
Example #5
0
	FAO_DAG(FAO* start_node, FAO* end_node,
			std::map<int, std::pair<FAO *, FAO *> > edges) {
		this->start_node = start_node;
		this->end_node = end_node;
		this->edges = edges;
		/* Allocate input and output arrays on each node. */
		auto node_fn = [](FAO* node) {
			node->alloc_data();
			node->init_offset_maps();
		};
		traverse_graph(node_fn, true);
	}
Example #6
0
	/* Evaluate the adjoint DAG. */
	void adjoint_eval() {
		auto node_eval = [this](FAO *node){
			node->adjoint_eval();
			// Copy data from node to children.
			for (size_t i=0; i < node->input_edges.size(); ++i) {
				size_t edge_idx = node->input_edges[i];
				FAO* target = this->edges[edge_idx].first;
				size_t len = node->get_elem_length(node->input_sizes[i]);
				size_t node_offset = node->input_offsets[edge_idx];
				size_t target_offset = target->output_offsets[edge_idx];
				// Copy len elements from node_start to target_start.
				gsl::vector_subvec_memcpy<double>(&target->output_data, target_offset,
							  &node->input_data, node_offset, len);
			}
		};
		double t = timer<double>();
		traverse_graph(node_eval, false);
		adjoint_evals++;
		double eval_time = timer<double>() - t;
		total_adjoint_eval_time += eval_time;
        // printf("T_adjoint_eval = %e\n", eval_time);
	}
Example #7
0
int main(){
  int estacoes, numero_linhas, t1, t2, i, count;
  int linhas[100][101];
  int marcacao[100];
//Inicialização de variáveis
  scanf("%d %d", &estacoes, &numero_linhas);
  count=1;
  while( estacoes !=0 ){
    for (i=0; i<estacoes; i++){
      linhas[i][100]= 0;
      marcacao[i]= 0;
    }
    for (i=0; i<numero_linhas; i++){
      scanf("%d %d", &t1, &t2);
      t2--;t1--;
      linhas[t1][linhas[t1][100]]= t2;
      linhas[t2][linhas[t2][100]]= t1;
      linhas[t1][100]++;
      linhas[t2][100]++;
    }
//Travessia de grafo
    traverse_graph( linhas, 0, marcacao );
//Checagem se todos os elementos foram visitados
    for (i=0; i<estacoes; i++)
      if ( marcacao[i] == 0)
        break;
//Imprimir a resposta
    printf("Teste %d\n", count );
    count++;
    if ( i == estacoes )
      printf("normal\n\n" );
    else
      printf("falha\n\n");
    scanf("%d %d", &estacoes, &numero_linhas);
  }
}
Example #8
0
void GraphTrav::Graph2Pro(void)
{
	int	i, j, k, l, n;
	int	num_part;
	int	pos[2];
	char	*start_edge;
	int	*edge_offset;
	int	offset;
	int	initedge_index, initedge_offset;
	char	*label;
	char	*initpep;
	int	len_initpep;

	cout<<"\n>>>Now Traverse the graph..."<<endl;
	//i = 610685;
	printf("Check at the beginning of graph traversal\n");
	printf("Peptides of lengths between %d and %d will be output\n", peptide_min, peptide_max);
        //printf("Edge i = %d tag %d, begtag %d endtag %d length %d pathseg-length %d\n", i, edge[i].tag, edge[i].begtag, edge[i].endtag, edge[i].length, pathlist[i] -> length);

	max_pep = 100 * num_edge;

	pepseq = NULL;

	start_edge = new char[num_edge];
	edge_offset = new int[num_edge * 3];

	for(i = 0; i < num_edge; i ++)	{
		edge[i].tag = edge[i].multitag = 0; //inilize the tag -- set to 0 
		start_edge[i] = 0;
	}

	for(i = 0; i < num_edge; i ++)	{
		if(vertex[edge[i].nodeindex[0]].indegree == 0 && edge[i].length > 0)	{
			start_edge[i] = 1;
		} else	{
			for(offset = 0; offset < 3; offset ++)	{
				edge_offset[3 * i + offset] = offset + Loc_Stopcodon(&(edge[i].seq[kmersize + offset]), edge[i].length - kmersize - offset);
			}
		}
	}
	num_peptides = 0;

	initpep = new char[max_length];

	for(i = 0; i < num_edge; i ++)	{
/*
printf("edge %d %d %d start_edge %d num_peptides %d nodes %d %d\n", i, &edge[i], edge[i].length, start_edge[i], num_peptides,
	 edge[i].nodeindex[0], edge[i].nodeindex[1]);
*/
/*
if(i > 1613)	{
	getchar();
}
*/
		len_initpep = 0;
		initedge_index = i;
		if(start_edge[i] == 1 && edge[i].tag == 0)	{
			for(offset = 0; offset < 3; offset ++)	{
/*
if(i == 1581451)	{
printf("pos1 i %d offset %d num_peptides %d\n", i, offset, num_peptides);
getchar();
}
*/
				initedge_offset = offset;
				traverse_graph(&edge[i], offset, initpep, len_initpep, initedge_index, initedge_offset);
			}
		} else	{
			for(offset = 0; offset < 3; offset ++)	{
				if(edge_offset[3 * i + offset] > offset)	{
					initedge_offset = kmersize + edge_offset[3 * i + offset];
/*
if(i == 1581451)	{
printf("pos2 offset %d %d num_peptides %dl length %d initedge_offset %d\n", offset, edge_offset[3 * i + offset], num_peptides, edge[i].length, initedge_offset);
getchar();
}
*/
					traverse_graph(&edge[i], initedge_offset, initpep, len_initpep, initedge_index, initedge_offset);
				}
/*
if(i == 747261)	{
printf("after offset %d\n", offset);
printf("continue\n");
}
*/
			}
		}
	}

	delete[] start_edge;
	delete[] edge_offset;
	delete[] initpep;
}