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; }
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); } } }
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; }
~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); }
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); }
/* 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); }
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); } }
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; }