您的位置:首页 > 理论基础

八皇后问题-C实现

2017-10-10 20:06 134 查看
最近程序的这些算法可是吃了点小亏。这是一个困饶了我很久的一个问题,以前不止一次有小伙伴同学讨论这算法个话题,每次我都觉得太难所以都只是听听不发表意见,知道最近有考试了才发现,我一直逃避的这些问题身为计算机专业的我根本不可能逃避的。所以既然逃不过那今天静下心来好好学习学习,就先从这个八皇后问题开始吧。

说实话这程序不是我自己的原创,不过借鉴别人的成果总能快速学习的对吧,比自己慢慢研究要高效很多。里面一个函数对于高手来说肯定不存在什么问题,就不要嘲笑我了。但是我自己本来就是菜鸟,所以我还是照顾 一下和我一样菜鸟的小伙伴,所以我还是介绍一下。里面有一个abs()函数这个是输出绝对值函数例如abs(-8)=8;abs(8)=8。在其他的也没啥了。

#include<stdio.h>
#include<math.h>
#define N 4
int cin = 1;
bool a[N + 1][N + 1] = { 1 };

bool scan(bool a[N+1][N+1]);//输出地图函数
bool Trial(int i);//循环行和列函数
bool Decide(bool a[N+1][N+1],int i,int j );//判断是否满足要求

int main()
{
Trial(1);//从第一行开始判断
return 0;
}

bool  scan(bool a[N + 1][N + 1])
{//输出地图函数
printf("sum=%d\n",cin++);
for (int i = 1; i < N + 1; i++)
{
for (int j = 1; j < N + 1; j++)
{
a[i][j] == 1? printf("%2d", 0) : printf(" *");
}
printf("\n");
}
return true;
}
bool Trial(int i)
{//循环行和列函数
if (i > N)
scan(a);
else
for (int j = 1; j < N + 1; j++)
{
a[i][j] = 1;
if (Decide(a, i, j))
Trial(i + 1);
a[i][j] = 0;
}
return true;
}
bool Decide(bool a[N + 1][N + 1], int i, int j)
{//判断是否满足要求
for (int m = 1; m <i; m++)//行
{
for (int n = 1; n < N + 1; n++)//列
{
if (a[m]
==1)
if (n == j || abs(i - m) == abs(j - n))
return false;
}
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机 算法 八皇后