 ``````Hey everyone,
I am making a nqueen program that’ll read me an array of the position of the
queen. I developed to different methods to do this. One is the recursion way
and the other is the iteration method . My problem lies in the recursion. I am trying
to count and display the number of solutions that the method finds, but I simply can’t
figure out how to do that because the count is inside a loop and once I make a

package queenproblem;

import java.util.Scanner;
import java.util.*;
import java.util.Arrays;

public class Queenproblem {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.print("n = ");
int n = kb.nextInt();
int []a = new int[n];
System.out.println("recursion...");
rNqueen(0,a);

System.out.println("iteration...");
iNqueen(n, a);
}
public static boolean aPlace(int k , int[] x){
for(int i = 0; i < k; i++){
if((x[i] == x[k])|| (Math.abs(x[i]- x[k])== Math.abs(i - k)))
return false;
}
//count(n);
return true;
}
public static void rNqueen(int k, int [] x){
int count = k;
for(int i = 0; i< x.length; i++){
x[k]= i+1;

if(aPlace(k,x)){

if(k == (x.length-1)){
count = x.length -count;
System.out.print(count + " = ");
System.out.println(Arrays.toString(x));
}
else{
//System.out.println("qcount =" + qcount);
rNqueen(k+1,x);
}
}
}
}
public static void iNqueen(int n, int []x){
int k2= 0;
x[k2]= 0;
int qcount= 0;
while(k2 != -1){
x[k2] = x[k2] + 1;
while((x[k2] <= n)&& (!aPlace(k2, x))){
x[k2]++;}
if(x[k2]<= n){
if(k2 == n-1){
qcount++;
System.out.print(qcount + " = ");
System.out.println(Arrays.toString(x));
}
else{
k2++;
x[k2]= 0;
}
}
else
k2--;
}
System.out.println("There are "+ qcount + " solutions.");
}
public int countNqueen(int x){
return x+1;
}
}
``````

## All 2 Replies

uhm you use count(n) however i see no method for this where is the method? because if you are incrementing a simple int you would use variable++? where is count defined? it cannot be defined within the method that is recursively called thats the key. So either make it global or pass as a parameter to the method which increments count++

see pseudo for correct way:

``````class X {
int count=0;
main() {
for(i<4;i++) {
methodIncrementingCount();
print(count);//display 4
}
}
methodIncrementingCount() {
count++
}
}
`````` wow that was it!! Thanks so much

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.