学院名称: 计算机工程学院
专业: 信息管理与信息系统
班级17信息1
姓名杨虎。2019 年1 月2 日。
一、第一类题目。
1.问题陈述。
如何能够在8*8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他皇后?为了达到此目的,任何两个皇后都不能处于同一条横行、纵行、或斜线上。
2.程序**。
#include <>
#include <>
#include <>
void nqueens(int *x, int n); 求解n皇后问题*/
int place(int *x, int k判断是否可以在第k行第x[k]列摆放皇后*/
void printsolution(int *x, int n); 输出求解结果*/
int main()
int n;
int *x存放求解结果的数组首地址*/
scanf("%d", n);
x=(int*)malloc(sizeof(int)*(n+1));动态分配数组空间, x[0]空闲*/
nqueens(x, n);
return 0;
*如果一个皇后能放在第k行第x[k]列,则返回真(1),否则返回假(0)*/
int place(int *x, int k)
int i;
/*对前k-1行,逐行考察*/
for(i=1; i
/*能执行下一句,说明在第k行第x[k]列摆放皇后,不会互相攻击*/
return 1;
*求解在n×n的棋盘上,放置n个皇后,使其不能互相攻击*/
void nqueens(int *x, int n)
int k;
k = 1; /k是当前行*/
x[k] =0; /x[k]是当前列,进到循环中,立刻就会执行x[k]++而选择了第1列*/
while(k>0)/*当将所有可能的解尝试完后,k将变为0,结束求解过程*/
else /*对应x[k]>n的情形,这一行已经没有再试的必要,回溯到上一行*/
k--;上一行在原第x[k]列的下1列开始考察*/
*输出求解结果*/
void printsolution(int *x, int n)
int i, j;
for (i = 1; i <=n; i++)输出第i行*/
printf("");
printf("");
3.运行结果。
4.设计体会与总结。
在这次实验中,我从中得到了许多的经验及新思路;在这个八皇后问题中,利用回溯的思想很容易解决。回溯法有“通用解法”之称,用它可以系统地搜索一个问题的所有解或任一解。回溯法在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。
算法搜索至解空间树的任一节点时,先判断该节点是否包含问题的解,如果肯定不包含,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯。否则,进入该子树,继续按深度优先策略搜索,适合于解决八皇后这类组合数较大的问题。
二、第二类题目。
1.问题陈述。
利用栈设计一个简单的计算器,可以做加、减、乘、除等基本运算。
2.需求分析。
从键盘上输入一个算数表达式,计算出表达式的值。
3.概要设计。
1)总体思路,先读入一行表达式,用一个字符数组存储。然后依次读每个字符,进行判断。边读入边进行计算。
程序中用到了两个栈,一个字符栈以及一个数字栈,分别用来存储运算符和数字,根据运算符的优先顺序进行计算。最后输出结果。
2)程序包括几个模块,主函数和几个基本函数。
4.详细设计。
#include<>
#include<>
#define ok 100001
#define error 100002
struct node
int data;
struct node *next;
typedef struct node node;
struct stack
node *top;
int count;
typedef struct stack stack;
int initstack(stack *s)
int emptystack(stack *s)
int push(stack *s, int e)
int gettop(stack *s)
int priority(char s)
int pop(stack *s)
int main()
5.程序**。
#include<>
#include<>
#define ok 100001
#define error 100002
struct node
int data;
struct node *next;
typedef struct node node;
struct stack
node *top;
int count;
typedef struct stack stack;
int initstack(stack *s)
s->top = null;
s->count = 0;
return ok;
int emptystack(stack *s)
return (s->count ==0) ?ok : error;
int push(stack *s, int e)
node *p = node *)malloc(sizeof(node));
if (null ==p)
p->data = e;
p->next = s->top;
s->top = p;
s->count++;
return ok;
int gettop(stack *s)
if (null ==s->top)
return (s->top->data);
int priority(char s)
switch(s)
int pop(stack *s)
int e;
if (null ==s->top)
node *p = s->top;
e = p->data;
s->top = p->next;
free(p);
s->count--;
return e;
int main()
char str[100] =
int i = 0, tmp = 0, j;
stack num, opt;
if (initstack(&num) !ok ||initstack(&opt) !ok)
printf("init failure!");
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...