Advertisement
Guest User

Untitled

a guest
Aug 15th, 2012
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. #include <stdio.h> //Biblioteca padrão de entrada e saída
  2. #include <string.h>
  3.  
  4. #define NMAX 101
  5. #define MAXD 201
  6.  
  7. //matriz de adjâcencia
  8. short g[NMAX][NMAX];
  9.  
  10. int dias[NMAX*MAXD];//cada dia esta em que ponto do caminho
  11. int fila[NMAX*MAXD];
  12. int enf[MAXD][MAXD];//marcacao dos enfileirados
  13. int o,d,dia;
  14. int n;
  15.  
  16. int main(){
  17.     int m,i,j,x,y,v;
  18.     int fim,ini;
  19.     bool pode;
  20.     while(scanf("%d %d",&n,&m)==2&&n){
  21.         //o grafo está zerado
  22.         memset(g,0,sizeof(g));
  23.         //não tem nada enfileirado
  24.         memset(enf,0,sizeof(enf));
  25.         //todas não foram visitadas
  26.         memset(dias,-1, sizeof(dias));
  27.  
  28.         for(i=0;i<m;++i){
  29.             scanf("%d %d",&x,&y);
  30.             //grafo bidirecional, marca pros 2 lados
  31.             g[x][y]=g[y][x]=1;
  32.         }
  33.         //lê origem, destino e número de dias
  34.         scanf("%d %d %d",&o,&d,&dia);
  35.  
  36.         pode=false;
  37.         /**CASO ESPECIAL, QNDO NÚMERO DE DIAS É 0(ZERO)**/
  38.         if(dia==0){//em nenhum dia nao sai da cidade
  39.             if(o==d)//se a origem é igual ao destino
  40.                 pode=true;//viagem ideal
  41.             //se origem é diferente do destino viagem nao é ideal pois nao ira mudar d cidade
  42.         }
  43.         /**CASO COMUM**/
  44.         else{
  45.             fim=1;//fim da fila
  46.             ini=0;//inicio da fila
  47.             fila[0]=o;//posicao inicial da fila é a cidade de origem
  48.             dias[0]=0;//dia 0
  49.             while(ini<fim && dias[ini]<dia){//enqto o dia atual é menor que o dia IDEAL
  50.                 v=fila[ini];//tira da fila
  51.                 for(i=1;i<=n;++i){//roda os vertices
  52.                     if(g[v][i] && !enf[i][dias[ini]+1]){//existe a aresta e este vertice ainda nao
  53.                                                         //está na fila do proximo dia
  54.                         fila[fim]=i;//poe na fila
  55.                         dias[fim]=dias[ini]+1;//aumenta um dia
  56.                         enf[i][dias[fim]]=1;//o vertice esta na fila
  57.                         if(dias[fim]==dia && i==d){//se chegou no dia IDEAL e o vertice é o destino
  58.                             ini=fim=0;//esvazia a fila
  59.                             pode=true;//viagem como teobaldo desejava
  60.                             break;
  61.                         }
  62.                         fim++;//aumenta tamanho da fila
  63.                     }
  64.                 }
  65.                 ini++;//proximo vertice da fila
  66.             }
  67.         }
  68.         if(pode)
  69.             printf("Yes, Teobaldo can travel.\n");
  70.         else
  71.             printf("No, Teobaldo can not travel.\n");
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement