Advertisement
DimasDark

L3Q1

Aug 8th, 2013
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.58 KB | None | 0 0
  1. public class L3Q1 {
  2.  
  3.     static Arquivo arquivo;
  4.  
  5.     static void imprimeFila(Fila f)
  6.     {
  7.         No p;
  8.         for (p = f.cabeca; p != null; p = p.proximo)
  9.         {
  10.             if (p.proximo == null)
  11.                 System.out.print(p.valor);
  12.             else
  13.                 System.out.print(p.valor + " ");
  14.         }
  15.         System.out.println();
  16.  
  17.     }
  18.  
  19.  
  20.     static void teste()
  21.     {
  22.         Fila f = new Fila();       
  23.  
  24.         f.insere(2);
  25.         System.out.println(" el:" + f.numElementos);
  26.         f.insere(4);
  27.         f.insere(6);
  28.         imprimeFila(f);
  29.         f.retira();
  30.         f.insere(7);
  31.         imprimeFila(f);
  32.         System.out.println(f.rabo.valor + " " + f.cabeca.valor + " el:" + f.numElementos);
  33.         while(f.numElementos > 0)
  34.             f.retira();
  35.         System.out.println(f.numElementos);
  36.     }
  37.  
  38.     static void fazBFS(boolean[][] usuarios, int tamanho, int arq)
  39.     {
  40.        
  41.         //Faz BFS
  42.         int conexoes = 0, minutos = 0;
  43.         Fila fila = new Fila();
  44.         Fila aux = new Fila(); 
  45.         boolean[] marcados = new boolean[tamanho];
  46.         fila.insere(arq);
  47. //      System.out.println("numero:" + fila.numElementos);
  48.  
  49.         while (!fila.isVazia())
  50.         {
  51.             int r = fila.retira();
  52.             marcados[r] = true;
  53.             for (int i = 0; i < tamanho; i++) {
  54.                 if (usuarios[r][i] && !marcados[i] && !aux.existe(i) && !fila.existe(i)) {
  55.                     aux.insere(i);
  56.                 }
  57.             }
  58. //          System.out.println("numero:" + fila.numElementos);
  59.  
  60.             if (fila.isVazia())
  61.             {
  62.                 int auxTemp = aux.numElementos;
  63.                 if (auxTemp > conexoes)
  64.                 {
  65.                     conexoes = auxTemp;
  66.                     minutos++;
  67.                 }
  68.                 fila = aux;
  69.                 aux = new Fila();
  70.             }
  71.         }
  72.         arquivo.print(conexoes);
  73.         if (minutos > 0)
  74.             arquivo.print(" " + minutos);
  75.         arquivo.println();
  76.         //fim BFS
  77.  
  78.     }
  79.  
  80.  
  81.     public static void main(String[] args)
  82.     {
  83.         arquivo = new Arquivo("L3Q1.in", "L3Q1.out");
  84.  
  85. //      teste();
  86.         //cout << "numero de casos:" << endl;
  87.         int vezes = arquivo.readInt();
  88.  
  89.         while (vezes > 0)
  90.         {
  91.             boolean usuarios[][];
  92.             int index = 0, numUsuarios = 0, qtdVaiLer = 0, num = 0;        
  93.  
  94.             numUsuarios = arquivo.readInt();
  95.             usuarios = new boolean[numUsuarios][numUsuarios];      
  96.             for (index = 0; index < numUsuarios; index++)
  97.             {
  98.                 qtdVaiLer = arquivo.readInt();                     
  99.                 for (int j = 0; j < qtdVaiLer; j++)
  100.                 {                  
  101.                     num = arquivo.readInt();                       
  102.                     usuarios[index][num] = true;
  103.                 }
  104.             }
  105.  
  106. //          for (int i = 0; i < numUsuarios; i++)
  107. //              for (int j = 0; j < numUsuarios; j++)
  108. //                  if (usuarios[i][j])
  109. //                      System.out.println((usuarios[i][j]));
  110.  
  111.             int testes = arquivo.readInt();
  112.             while (testes > 0)
  113.             {
  114.                 int arq = arquivo.readInt();
  115.                 fazBFS(usuarios, numUsuarios, arq);
  116.                 testes--;
  117.             }
  118.             arquivo.println();
  119.  
  120.             vezes--;
  121.         }
  122.         arquivo.close();
  123.  
  124.     }
  125. }
  126.  
  127. class No
  128. {
  129.     public No(int v) {
  130.         this.valor = v;
  131.     }
  132.     int valor;
  133.     No proximo;
  134.  
  135. }
  136.  
  137. class Fila
  138. {
  139.     No cabeca;
  140.     No rabo;
  141.     int numElementos;
  142.  
  143.     public Fila()
  144.     {
  145.  
  146.         this.cabeca = this.rabo = null;
  147.         this.numElementos = 0;
  148.     }
  149.  
  150.     //Insere no fim
  151.     void insere(int v)
  152.     {
  153.         this.numElementos++;
  154.         No novo = new No(v);
  155.         if (this.cabeca == null)
  156.         {
  157.             this.cabeca = this.rabo = novo;
  158.             return;
  159.         }
  160.         this.rabo.proximo = novo;
  161.         this.rabo = novo;
  162.     }
  163.  
  164.     //Retira do inicio
  165.     int retira()
  166.     {
  167.         if (this.cabeca == null)
  168.         {
  169.             return -1;
  170.         }
  171.         this.numElementos--;
  172.         int i = this.cabeca.valor;
  173.  
  174.         if (this.cabeca == this.rabo)
  175.         {
  176.             this.cabeca = this.rabo = null;
  177.             return i;
  178.         }
  179.  
  180.         this.cabeca = this.cabeca.proximo;
  181.        
  182.         return i;
  183.     }
  184.  
  185.     boolean isVazia()
  186.     {
  187.         return this.cabeca == null;
  188.     }
  189.  
  190.     boolean existe(int n)
  191.     {
  192.         No aux = this.cabeca;
  193.         while (aux != null)
  194.         {
  195.             if (aux.valor == n)
  196.                 return true;
  197.             aux = aux.proximo;
  198.         }
  199.         return false;
  200.  
  201.     }
  202.  
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement