Ajuda Com Threads!

0 respostas
J

Bom!

Fiquei em duvida si editava o post que fiz recentemente ou si eu criava outro, programa é o mesmo, mas duvida totalmente diferente "outro assunto".

To fazendo um trabalho NRainhas com Backtraking. OK ele tá feito rodando e fazendo tudo certo.
Mas ae vem a segunda parte dele, adicionar THREADS.

Preciso que ao digitar a quantidade de rainhas, ele gere as Threads com o mesma quantidade, e que cada Thread chame a função start() passando como paramentro o numero de rainhas. Tipow!

quant=4;

Thread1 chama função start(1);// 1 como paramentro
Thread2 chama função start(2);//...
Thread3 chama função start(3);//...
Thread4 chama função start(4);//...

Blz startei a Thread1 chamei a função start(1);
Vai tentar inserir os elementor, não vai dar certo, vai fazer o backtraking
tento todas as alternativas com 1 na primeira posição, a Thread1 para. E o mesmo com as outras. Mas todas elas tem q começar junto, pq o objetivo e reduzir o tempo para econtrar a solução.

Comecei assim, dentro do main().

for (int i =0; i <=quant ; i++) {
           
              new NRainhas("RAINHA_" + i, quant).start(NRainhas.r);
              NRainhas.r++;
          }

Dentro da classe NRainhas depois de extender ela a Thread fiz:

@Override
public void run () {                  
  do{
    start(r);           
    r++;                
  }while(r<=Main.quant);

Só que não está dando muito resultado.

Meu codigo é esse: Si alguem pode me ajudar, agradeço muito.

package nrainhas;

import javax.swing.JOptionPane;

/**
 *
 * @author Jaderson
 */
public class NRainhas extends Thread {
    public Main m;
    int i=0, w=1,x=0;
    //static int quant;
    static int r=1;
    int filho[] = null;
    String nome;
    // int armz[] = null;

public NRainhas(String nome,int quant){
   super(nome);
}

public void start(int r){
    /*String rainhas = JOptionPane.showInputDialog("Digite a quantidade de rainhas.");
    if(rainhas.equals("")){
        System.out.println("Você não digito nenhum numero.");
        System.exit(0);
    }
    quant = Integer.parseInt(rainhas);
    if( quant <= 3){
        System.out.println("Digite um numero maior que 3.");
        System.exit(0);
    }*/
    
    filho = new int [Main.quant];
    filho[0]=r;
    rainhas(filho, r);
}

public void rainhas(int filho[], int r){

   for(int cont=0;cont<=filho.length-1;cont++){

       if(r>Main.quant){
       r=filho[i];
       r++;
       filho[i]=0;
       if(i>0)
       i--;
       if((filho[0]==0)&&(filho[Main.quant-1]==0)&&(r==Main.quant+1)){
            System.exit(0);
       }

       rainhas(filho, r);

       }
       if(r==filho[cont]){
          r++;
          cont=-1;
       }

   }
ConfDiagonal(filho, r);
}

public void ConfDiagonal(int filho[], int r){
    w=i+1;
    for(int cont = 0; cont<=i+1; cont ++){
        if((r==filho[cont]-w)||(r==filho[cont]+w)){
            r++;
        if((filho[0]==0)&&(filho[Main.quant-1]==0)&&(r==Main.quant+1)){
            System.exit(0);
        }
            rainhas(filho, r);
        }
            w--;
        }
        if(filho[0]!=0)
        i++;
        insere(filho, r);
}

/*public void backtreking(int filho[], int r){
    //System.out.println("filho ná posição 0 é: "+ filho[0]+" filho na posição 7 é: "+ filho[quant-1]+" e R é: " + r);
    if((filho[0]==0)&&(filho[quant-1]==0)&&(r==quant+1)){
        System.exit(0);
    }

    rainhas(filho, r);
}*/

public void insere(int[] filho, int r) {

    filho[i]=r;
        //if(filho[0]==2)
        //NRainhas.interrupted();
        if(filho[Main.quant-1]!=0){
        x++;
        
        System.out.println("------------RESPOSTA------------ "+x);

        for(int cont=0;cont<=filho.length-1;cont++)
            System.out.print((filho[cont])+("|"));
            System.out.print("\n");
        }
        r=1;
        rainhas(filho, r);
}

    @Override
public void run () {    //O Programa criar a quantidade de Threads da mesma quantidade que a variavel quant recebe.
 //int r=1;               //E cada Thread chama a função start passando como paramentro o numero da rainha.
  do{
    start(r);           //Thread RAINHA_1 chama a função start passando 1 como paramentro.
    r++;                //Thread RAINHA_2 chama a função start passando 2 como paramentro.
  }while(r<=Main.quant);

}

}
package nrainhas;

import javax.swing.JOptionPane;

/**
 *
 * @author Jaderson
 */

public class Main {
    public NRainhas nr;
    public static int quant;


    public static void main(String[] args) {
          String rainhas = JOptionPane.showInputDialog("Digite a quantidade de rainhas.");

          if(rainhas.equals("")){
            System.out.println("Você não digito nenhum numero.");
            System.exit(0);
          }
            quant = Integer.parseInt(rainhas);
          if( quant <= 3){
             System.out.println("Digite um numero maior que 3.");
             System.exit(0);
          }

          for (int i =0; i <=quant ; i++) {
           
              new NRainhas("RAINHA_" + i, quant).start(NRainhas.r);
              NRainhas.r++;
          }
        
        
        
        //NRainhas nr = new NRainhas(quant);
        //nr.start(1);
       
    }

}
Criado 7 de dezembro de 2010
Respostas 0
Participantes 1