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]