Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Busca em profundidade com memoização
- Problema: Passeio da Bicicleta
- Descobre qual a profundidade maxima a partir de um nó inicial
- Entrada: Grafo Acíclico - Lista de adjacencias
- Saida: Profundidade Maxima a partir de um nó inicial
- */
- #include <cstdio>
- #include <cstdlib>
- #include <vector>
- #include <cstring>
- using namespace std;
- vector < vector<int> > Grafo;
- int melhor[160],alturas[160];
- int BPA(int vertice){
- int temp;
- if(melhor[vertice] == -1){
- melhor[vertice] = 0;
- for (std::vector<int>::iterator it = Grafo[vertice].begin(); it != Grafo[vertice].end(); it++){
- temp=1+BPA(*it);
- if(temp > melhor[vertice])
- melhor[vertice] = temp;
- }
- }
- return melhor[vertice];
- }
- int main(){
- int P,L,I,aux,aux2,N,K = 0;
- while(scanf("%d %d %d", &P, &L, &I) && P){
- Grafo.resize(0);
- Grafo.resize(P);
- for(int i = 0; i < P; i++){
- scanf("%d", &aux);
- alturas[i] = aux;
- melhor[i] = -1;
- }
- for(int i = 0; i < L; i++){
- scanf("%d %d", &aux, &aux2);
- if(alturas[aux2-1] < alturas[aux-1])
- Grafo[aux-1].push_back(aux2-1);
- }
- printf("Teste %d\n",++K);
- printf("%d\n\n",BPA(I-1));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement