linux大作业 八皇后问题

发布 2022-09-10 10:13:28 阅读 7576

22013—2014 学年第一学期物电学院期末考试卷。

linux操作系统》

学号姓名班级。

成绩:评语:

考试题目及要求)

八皇后问题。

1、设计背景。

八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是国际西洋棋棋手马克斯·贝瑟尔于2023年提出:在8x8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

高斯认为有76种方案。2023年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。

八皇后问题最早是由国际西洋棋棋手马克斯·贝瑟尔于2023年提出。之后陆续有数学家对其进行研究,其中包括高斯和康托,并且将其推广为更一般的n皇后摆放问题。八皇后问题的第一个解是在2023年由弗朗兹·诺克给出的。

诺克也是首先将问题推广到更一般的n皇后摆放问题的人之一。2023年,s.冈德尔提出了一个通过行列式来求解的方法,这个方法后来又被格莱舍加以改进。

艾兹格·迪杰斯特拉在2023年用这个问题为例来说明他所谓结构性编程的能力。

算法介绍八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。

八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。

二、程序设计的基本思想,原理和算法描述。

图形实现。对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、更生动,使教学能产生良好的效果。下面是用 c实现的八皇后问题的图形程序,能够演示全部的92组解。

八皇后问题动态图形的实现,主要应解决以下两个问题。

回溯算法。为解决这个问题,我们把棋盘的横坐标定为i,纵坐标定为j,i和j的取值范围是从1到8。当某个皇后占了位置(i,j)时,在这个位置的垂直方向、水平方向和斜线方向都不能再放其它皇后了。

程序说明:(我的linux系统是安装虚拟机上的所以我只有通过截图来说明。)

分为三个部分:具体说明如下:

*主程序*/

#include <>

#include<>

#include<>

#include”

static char queen[8][8];

static int a[8];

static int b[15];

static int c[15];

int main(int argc,**gr**)

int iline,icolumn; /棋盘初始化,空格为*,放置皇后的地方为@

for(iline=0;iline<8;iline++)

//主、从对角线标记初始化,表示没有冲突。

for(iline=0;iline<15;iline++)

b[iline]=c[iline]=0;

qu(0);

system("pause");

return 0

在桌面终端中vi 开。

*qu.回溯法放置queens*/

#include”

#include<>

static char queen[8][8];

static int a[8];

static int b[15];

static int c[15];

static int iqueennum=0;//记录总的棋盘状态数。

void qu(int i)

int icolumn;

for(icolumn=0;icolumn<8;icolumn++)

在桌面终端中用vi 打开。

#ifndef _qu_h

#define _qu_h

void qu(int i);

#endif

再写一个makefile文件用于同一的编译:

*makefile*/

main:

gcc -o main

gcc -c

gcc -c

经过make统一编译之后得到执行文件main。然后再运行main(即。/main)即可得到如下所示(这里只列举部分运行结果);

这是我在桌面终端中运行的部分结果。

最后所有生成的文件有如下截图所示:

包括有:main、文件。

三、设计过程:

1. 设计思路及流程:在这次的设计过程中用到了很多的linux的命令并且也熟悉部分语句的用法。

一开始我是在我的电脑上装了一个虚拟机让后再虚拟机上配置了linux系统(red hat linux)。之后在我的虚拟机上做的练习跟作业。

进入虚拟机界面启动rad hat linux 系统。进入根目录下开始作业具体步骤如下:(”n”表示回车)

cd/home

mkdir dazuoye

vi 进入编辑界面输入:

*主程序*/

#include <>

#include<>

#include<>

#include”

static char queen[8][8];

static int a[8];

static int b[15];

static int c[15];

int main(int argc,**gr**)

int iline,icolumn;

for(iline=0;iline<8;iline++)

for(iline=0;iline<15;iline++)

b[iline]=c[iline]=0;

qu(0);

system("pause");

return 0

保存退出(esc :wq)

vi 进入的编辑界面输入:

#include”

#include<>

static char queen[8][8];

static int a[8];

static int b[15];

static int c[15];

static int iqueennum=0;

void qu(int i)

int icolumn;

for(icolumn=0;icolumn<8;icolumn++)

保存退出后继续编写:vi

#ifndef _qu_h

#define _qu_h

Linux大作业

linux基础与应用 学生姓名张振东。学号 5011210108 专业计算机科学与技术 班级计算机14 1 所属学院信息工程学院 指导教师范振岐。塔里木大学教务。目录。引言 1 1 实习的目的和意义 1 2实习目标与总体方案 3 2.1 熟悉基本网络命令 3 2.2 配置nfs服务器以及配置samb...

Linux大作业

石家庄学院。课程设计报告。一 题目分析 通过对web服务器的有关配置,深刻理解web服务器的功能,并学会如何配置基于ip,基于端口,基于域名的虚拟主机。二 制作过程 2.1 配置基于ip的虚拟主机 下面介绍在 192.168.0.8 和192.168.0.9 上创建两个基于ip 地址的虚拟主机的配置...

Linux大作业

linux课程 学生姓名张振东 学号 5011210108 专业计算机科学与技术 班级计算机14 1 所属学院信息工程学院 塔里木大学教务处制。引言。linux是一套免费使用和自由传播的类unix操作系统,是一个基于posix和unix的多用户 多任务 支持多线程和多cpu的操作系统。它能运行主要的...