Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class L3Q1 {
- static Arquivo arquivo;
- static void imprimeFila(Fila f)
- {
- No p;
- for (p = f.cabeca; p != null; p = p.proximo)
- {
- if (p.proximo == null)
- System.out.print(p.valor);
- else
- System.out.print(p.valor + " ");
- }
- System.out.println();
- }
- static void teste()
- {
- Fila f = new Fila();
- f.insere(2);
- System.out.println(" el:" + f.numElementos);
- f.insere(4);
- f.insere(6);
- imprimeFila(f);
- f.retira();
- f.insere(7);
- imprimeFila(f);
- System.out.println(f.rabo.valor + " " + f.cabeca.valor + " el:" + f.numElementos);
- while(f.numElementos > 0)
- f.retira();
- System.out.println(f.numElementos);
- }
- static void fazBFS(boolean[][] usuarios, int tamanho, int arq)
- {
- //Faz BFS
- int conexoes = 0, minutos = 0;
- Fila fila = new Fila();
- Fila aux = new Fila();
- boolean[] marcados = new boolean[tamanho];
- fila.insere(arq);
- // System.out.println("numero:" + fila.numElementos);
- while (!fila.isVazia())
- {
- int r = fila.retira();
- marcados[r] = true;
- for (int i = 0; i < tamanho; i++) {
- if (usuarios[r][i] && !marcados[i] && !aux.existe(i) && !fila.existe(i)) {
- aux.insere(i);
- }
- }
- // System.out.println("numero:" + fila.numElementos);
- if (fila.isVazia())
- {
- int auxTemp = aux.numElementos;
- if (auxTemp > conexoes)
- {
- conexoes = auxTemp;
- minutos++;
- }
- fila = aux;
- aux = new Fila();
- }
- }
- arquivo.print(conexoes);
- if (minutos > 0)
- arquivo.print(" " + minutos);
- arquivo.println();
- //fim BFS
- }
- public static void main(String[] args)
- {
- arquivo = new Arquivo("L3Q1.in", "L3Q1.out");
- // teste();
- //cout << "numero de casos:" << endl;
- int vezes = arquivo.readInt();
- while (vezes > 0)
- {
- boolean usuarios[][];
- int index = 0, numUsuarios = 0, qtdVaiLer = 0, num = 0;
- numUsuarios = arquivo.readInt();
- usuarios = new boolean[numUsuarios][numUsuarios];
- for (index = 0; index < numUsuarios; index++)
- {
- qtdVaiLer = arquivo.readInt();
- for (int j = 0; j < qtdVaiLer; j++)
- {
- num = arquivo.readInt();
- usuarios[index][num] = true;
- }
- }
- // for (int i = 0; i < numUsuarios; i++)
- // for (int j = 0; j < numUsuarios; j++)
- // if (usuarios[i][j])
- // System.out.println((usuarios[i][j]));
- int testes = arquivo.readInt();
- while (testes > 0)
- {
- int arq = arquivo.readInt();
- fazBFS(usuarios, numUsuarios, arq);
- testes--;
- }
- arquivo.println();
- vezes--;
- }
- arquivo.close();
- }
- }
- class No
- {
- public No(int v) {
- this.valor = v;
- }
- int valor;
- No proximo;
- }
- class Fila
- {
- No cabeca;
- No rabo;
- int numElementos;
- public Fila()
- {
- this.cabeca = this.rabo = null;
- this.numElementos = 0;
- }
- //Insere no fim
- void insere(int v)
- {
- this.numElementos++;
- No novo = new No(v);
- if (this.cabeca == null)
- {
- this.cabeca = this.rabo = novo;
- return;
- }
- this.rabo.proximo = novo;
- this.rabo = novo;
- }
- //Retira do inicio
- int retira()
- {
- if (this.cabeca == null)
- {
- return -1;
- }
- this.numElementos--;
- int i = this.cabeca.valor;
- if (this.cabeca == this.rabo)
- {
- this.cabeca = this.rabo = null;
- return i;
- }
- this.cabeca = this.cabeca.proximo;
- return i;
- }
- boolean isVazia()
- {
- return this.cabeca == null;
- }
- boolean existe(int n)
- {
- No aux = this.cabeca;
- while (aux != null)
- {
- if (aux.valor == n)
- return true;
- aux = aux.proximo;
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement