~cpp
#include <iostream.h>
#include <math.h>
bool EightQueens(int level, int queens[]);
bool Promissing(int level, int queens[]);
bool WellPutted(int level1, int level2, int queens[]);
int main(int argc, char* argv[])
{
int queens[8],i;
for (i=0;i<8;i++) queens[i]=0;
if (EightQueens(0,queens))
{
cout<<"the result is ";
for (i=0;i<8;i++)
cout<<queens[i]<<" ";
cout<<endl;
}
else
{
cout<<"it's an impossible problem\n";
}
return 0;
}
bool EightQueens(int level, int queens[])
{
int i;
for (i=0;i<8;i++)
{
queens[level]=i;
if (Promissing(level,queens))
{
if (level==7)
{
return true;
}
else
{
if (EightQueens(level+1,queens))
return true;
}
}
}
return false;
}
bool Promissing(int level, int queens[])
{
int i,j;
if (level==0)
return true;
for (i=0;i<level;i++)
{
//for (j=i+1;j<level+1;j++)
//{
if (!WellPutted(i,level,queens)) //if (!WellPutted(i,j,queens))
return false;
//}
}
return true;
}
bool WellPutted(int level1, int level2, int queens[])
{
if (queens[level1]==queens[level2])
return false;
if (abs(queens[level1]-queens[level2])==abs(level2 - level1))
return false;
return true;
}
주석처리된 부분은 도전한 이후에 다시 코드를 보았을때 불필요하다고 생각되는 부분을 지운 것입니다. --이덕준