遡及法によるN皇后問題解決C言語
4026 ワード
問題の説明:
八皇后問題はチェスを背景にした問題である.×8のチェス盤には8人の皇后が置かれており、どの皇后も他の皇后を直接食べることができませんか?この目的を達成するために、両皇后も同じ横行、縦行、斜線にあってはならない.
遡及法:
遡及法は探査法とも呼ばれる.遡及法の基本的な方法は深さ優先探索である.つまり、一つの道を前にして、入ることができれば入るが、入ることができなければ戻ってきて、道を変えてからやってみる.
ソース:
転載先:https://www.cnblogs.com/yuyu-blog/p/9046670.html
八皇后問題はチェスを背景にした問題である.×8のチェス盤には8人の皇后が置かれており、どの皇后も他の皇后を直接食べることができませんか?この目的を達成するために、両皇后も同じ横行、縦行、斜線にあってはならない.
遡及法:
遡及法は探査法とも呼ばれる.遡及法の基本的な方法は深さ優先探索である.つまり、一つの道を前にして、入ることができれば入るが、入ることができなければ戻ってきて、道を変えてからやってみる.
ソース:
#include
#include
int x[9]={
0};
bool PLACE(int k)// k
{
int i=1;
while(i<k)
{
if(x[i]==x[k]||fabs(x[i]-x[k])==fabs(i-k))
return false;
i++;
}
return true;
}
void NQUEENS(int n)
{
int i,k=1; //k
x[1]=0;//x[k] k
while(k>0)
{
x[k]++;
while(x[k]<=n&&!PLACE(k))// ,
x[k]++;
if(x[k]<=n)
{
if(k==n)// x[]
{
for(i=1;i<=n;i++)
printf("x[%d]:%d ",i,x[i]);
printf("
");
}
else//
{
k++; x[k]=0;
}
}
else k--;// ,
}
return ;
}
int main()
{
NQUEENS(8);
return 0;
}
転載先:https://www.cnblogs.com/yuyu-blog/p/9046670.html