Ajuda Com Threads!

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!

[quote]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);//…[/quote]

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().

[code]for (int i =0; i <=quant ; i++) {

          new NRainhas("RAINHA_" + i, quant).start(NRainhas.r);
          NRainhas.r++;
      }[/code]

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.

[code]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®; //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);

}

}[/code]

[code]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);
   
}

}[/code]