n皇后問題

/**以下是關於皇后的擺放判斷的具體操作
int Place(int* Column,int index){
int i;
for(i=1;i<=index;i++){
 int Column_differ=abs(Column[index]-Column[i]);/**皇后的位置與棋盤最大寬度的                                                /*距離
 int Row_differ=abs(index-i);                 /**皇后的位置與棋盤最大高度的距                                              /**離
                                            /**根本目的是爲了避免一前一後兩個                                           /*皇后在同一斜線上
 if(Column[i]==Column[index]||Column_differ==Row_deffer)
   /**判斷皇后的位置是否在最後一行,是否在斜線的交叉處位置
    return 0;
  /**退回上一行的開始部分進行篩選
  }
 return 1;/**滿足擺放條件,進行下一輪的擺放
}

void N_Queue(int n){
 int Column_Num[n+1];
 int index=1;
 int i;
 int answer_num=0; /**answer_num?
           /**初始化元素
 for(i=1; i<=n;i++)
  Column_Num[i]=0;/**表示從行首開始
  for(int i=1;i<=n;i++)
    Column_Num[i]=0;
         while(index>0){
      Column_Num[index]++;
          while(Column_Num[index]<=n && !Place(Column_Num,index))          /**尋找皇后的位置
                Column Num[index]++;
                if(Column_Num[index]<=n){
                   if(index==n){                                                    /**最後一個皇后放置成功!
                      answer_num++;
                      for(i=1;i<=n;i++)
              Column_Num[index]++;
              }
        
                  else{
                /**繼續尋找下一個皇后的位置
                index++;
                Column_Num[index]=0;
                }
            }
           }
        else
            index--;/**當前皇后無法擺放,回溯至上一個皇后
        }
    }

 

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