#include 上一篇 1000億美元?云競爭日趨白熱化 多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线
八皇后問題
#include <stdlib.h>
#include<iostream>
using namespace std;
const int N=20; //最多放皇后的個數
int q[N]; //各皇后所在的行號
int cont = 0; //統計解得個數
//輸出一個解
void print(int n)
{
int i,j;
cont++;
printf("第%d個解:",cont);
for(i=1;i<=n;i++)
printf("(%d,%d) ",i,q[i]);
printf("
");
for(i=1;i<=n;i++) //行
{
for(j=1;j<=n;j++) //列
{
if(q[i]!=j)
printf("# ");
else
printf("@ ");
}
printf("
");
}
}
//檢驗第i行的k列上是否可以擺放皇后
int find(int i,int k)
{
int j=1;
while(j<i) //j=1~i-1是已經放置了皇后的行
{
//第j行的皇后是否在k列或(j,q[j])與(i,k)是否在斜線上
if(q[j]==k || abs(j-i)==abs(q[j]-k))
return 0;
j++;
}
return 1;
}
//放置皇后到棋盤上
void place(int k,int n)
{
int j;
if(k>n)
print(n);
else
{
for(j=1;j<=n;j++) //試探第k行的每一個列
{
if(find(k,j))
{
q[k] = j;
place(k+1,n); //遞歸總是在成功完成了上次的任務的時候才做下一個任務
}
}
}
}
int main(void)
{
int n;
printf("請輸入皇后的個數(n<=20)");
cout<<endl;
cout<<"NUM=";
scanf("%d",&n);
if(n>20)
printf("n值太大,不能求解!
");
else
{
printf("%d皇后問題求解如下(每列的皇后所在的行數):
",n);
place(1,n); //問題從最初狀態解起
printf("
");
}
system("pause");
return 0;
}
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈