1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| #include <iostream>
using namespace std;
#define order 8
void printall(int arr[]);
bool validity_check(int,int,int []);
int main()
{
int nextjump[order];//Keeps track for every order what should be the pos. of next jump.
for(int i=0;i<order;i++) nextjump[i]=0;
int level=0;
int position[order];
mainloop:
while(true)
{
//cout<<"Entered the while loop"<<endl; //This is the line which can change the whole output when uncommented
for(int i=nextjump[level];i<order;i++)
{
if(validity_check(level,i,position))
{
cout<<"Successful at level "<<level<<" using position "<<i<<endl;
position[level]=i;
nextjump[level++]=i+1;
if(level==order)
{
printall(position);
goto mainloop;
}
nextjump[level]=0;
goto mainloop;
}
}
level-- ;
goto mainloop;
}
return 0;
}
bool validity_check(int level,int n, int current[])
{
for(int i=0;i<level;i++)
{
if(current[i]==n) return false;
}
//Level 0 has always full validity.
if((level>0)&&(level<order-1))
{
if((current[level-1]==n)|(current[level+1]==n)) return false;
}
if(level==order-1)
{
if(current[level-1]==n) return false;
}
}
void printall(int current[])
{
for(int i=0;i<order;i++)
{
cout<<current[i]<<endl;
}
} |