8皇后問題算法

///////////////////////
//八皇后問題 回朔法 
//該算法的思路是:每個皇后先後從第一列出發,找合適自己的列的位置。當找到合適的位置
//   則下一個皇后出發。如果沒找到則回朔到上一個皇后繼續找,知道8個皇后全有合適位置爲止。
#include <stdio.h>

#define MAX 8

int Match(int line[],int p)   //檢測是否符合條件
{
 int i;
 if(p==0)
  return 1;
 else
 {
  for(i=0;i<p;i++)
  {
   if(line[i]==line[p])   
    return 0;
   if(p-i==line[p]-line[i])
    return 0;
   if(i+line[i]==p+line[p])
    return 0;
  }
  return 1;
 }
}


void main()
{
 int line[MAX]={0};   //記錄皇后的列座標
 int p=0,k=0;           //p指向當前皇后即行座標  k記錄解的個數
    int i;
   while(1)
 {
    if(Match(line,p))  //符合條件
    {
     if(p==MAX-1)    //檢測是否8個皇后擺好了
     {
      k++;
               for(i=0;i<=p;i++)
       printf("  %d  ",line[i]);
      printf("/n");
      p--;
      if(line[p]==MAX-1)  
       p--;
               line[p]++;
     }
     else  //不到8個皇后直接下一個皇后
     {
     p++;
     line[p]=0;
     }
    }
    else         
    {
     if(line[p]==MAX-1)      //檢測是否列座標到終點
     {
      if(p==0)            //判斷第1個皇后是否到了終點
         break;
      else
      {
       p--;
       if(line[p]==MAX-1)    //判斷第一個皇后是否到了終點
       {
        if(p==0)
         break;
        p--;
       }
       line[p]++;
      }
     }
     else                   //直接下一列
              line[p]++;
    }
 }
 printf("%d",k);
}
////////////注意考慮好各種極限位置
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章