# Eight Queens Problem without Recursion

```//
//  main.cpp
//  eightqueen
//
//  Created by pittnuts on 6/28/15.
//

#include <iostream>

int main()
{
int here = {-1,-1,-1,-1,-1,-1,-1,-1};//visited positions for i-th row
int a; //A queen on i-th column
int b;//A queen on the “/” diagonal
int c;//A queen on the “\” diagonal
int count=0;
memset(a,0,sizeof(int)*8);
memset(b,0,sizeof(int)*15);
memset(c,0,sizeof(int)*15);

int line = 0;
bool matched;
while( line>=0 ){//check if back tracking finished
matched = false;
for (int i =here[line]+1;i<8;i++){//search begins at the position previously visited
if (0==a[i] && 0==b[line+7-i] && 0==c[line+i]){//the first matched position
if (here[line]>=0){//clear original record
a[here[line]] = b[line+7-here[line]] = c[line+here[line]] = 0;
}
here[line] = i;
a[i] = b[line+7-i] = c[line+i] = 1;
matched = true;
break;
}
}

if (matched){
line++;//next row
if (line == 8){
count++;
line--;
}
}else{
if (here[line]>=0){//clear original record
int tmp = here[line];
here[line] = -1;
a[tmp] = b[line+7-tmp] = c[line+tmp] = 0;
}
line--;//back tracking
}
}
printf("%d\n",count);//print total (92) solutions
return 0;
}```