當前位置:編程學習大全網 - 源碼下載 - 有用C寫的 含有putchess函數的八皇後問題的程序? 帶註釋的

有用C寫的 含有putchess函數的八皇後問題的程序? 帶註釋的

提示:在國際象棋上放置皇後時,任何壹個皇後的水平、豎直和斜45?都不能有另壹個皇後。解決該問題采用逐次試探的方法,即采用遞歸調用putchess函數的方法。首先將第壹個皇後放於第壹行第壹列,然後開始向下壹行遞歸。每壹步遞歸中,首先檢測待放置位置是否與已放置的皇後沖突,如不沖突,則進行下壹行的放置,否則,選擇該行的下壹個位置進行檢測。如整行的位置都沖突,則回到上壹行,重新選擇位置

#include <stdio.h>

#include <math.h>

#define MAX 8 //棋子數及棋盤大小MAXxMAX

int result[MAX],count=0;

int chess_cross(int n)//判斷是否可放置

{

int i;

for(i=0;i<n;i++)

{

if(result[i] == result[n] || n-i == abs(result[n] - result[i]))//斜率等於1

return 1;

}

return 0;

}

void show_result()//打印符合要求的組合

{

int i;

for(i=0;i<MAX;i++)

printf("(%d,%d)",i,result[i]);

printf("\n");

count++;

}

void put_chess(int n)//放置棋子到棋盤上

{

int i;

for(i=0;i<MAX;i++)

{

result[n] = i;

if(!chess_cross(n))//有沒有符合要求的

{

if(n == MAX -1)

show_result();

else

put_chess(n+1);

}

}

}

int main()

{

put_chess(0);

printf("壹***有%d種可能!\n",count);

}

  • 上一篇:蓮花爭霸新加坡源代碼
  • 下一篇:麻辣芳鄰老楊帶楊過去鄉下哪壹集
  • copyright 2024編程學習大全網