硬币游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》

姓名:

专业班级:

学号:

指导教师:

成绩:

2010 年 12 月 22 日

目录

目录 (1)

1. 硬币游戏表示及其运算的实现 (2)

1.1 需求说明 (2)

1.2功能描述 (2)

1.3 系统设计 (2)

1.4 程序运行与结果 (2)

2.总结与分析 (4)

3附录(代码) (4)

附录1 一元多项式的表示及其运算程序源代码 (4)

1.硬币游戏表示及其运算的实现

1.1 需求说明

在游戏开始之前,在桌上将三个硬币放置成一条直线。游戏开始的时候,中间一个硬币是背面朝上,其他两个硬币是正面朝上。游戏目标是改变硬币的摆放形式,让中间一个硬币正面朝上,其他两个硬币背面朝上。具体规则如下:

(1)任何时候都能翻转中间的硬币(从正面翻成背面或相反)

(2)当另外两个硬币都是正面或都是背面的时候能够翻转一端的硬币(从正面翻成背面或相反);

不能通过任何其他方式翻转硬币,如平移它们。但是,只要满足这些规则,你就能够翻转硬币

1.2功能描述

在不违反游戏规则的前提下,能将三枚硬币按照客户的意愿从一种状态转换成另一种状态,中间的每一步在运行结果中显示;如果状态不可转化,则在运行结果中说明。

1.3 系统设计

使用无向图,图中每个顶点代表三个硬币的一种状态(8种状态对应8个顶点,一个状态可用一个字符串表示,如”+ - +”表示了一个中间一个硬币是背面朝上,其他两个硬币是正面朝上的状态);当使用其中一条规则能在两个状态之间来回移动时,就通过一个边连接无向图的两个顶点。

三枚硬币的八种状态类似与三位二进制数排列一样,可以先求出它的邻接矩阵,每种硬币的状态可用0、1、-1表示,0代表本身状态,1代表可以转化为下一状态,-1代表不能转化。应用指针指向每种状态,若初始状态可以转化为目标状态,转化过程在结果中输出。

1.4 程序运行与结果

2.总结与分析

这次实训我做的是一个简单的翻硬币游戏,按照要求该程序只需按照规则改变硬币的状态。本来能够在次基础上更加细化程序,使其有更多的功能。但由于能力有限,再加上其他科目考试等原因,没能实现。通过这次实训,我也认识到了自己的一些缺陷,没能清楚的理解TC3.0和VS6.0这两种编译工具不同。要写好程序,还需对编译工具有更深一部的了解。

3附录

附录1 硬币游戏的表示及其运算程序源代码

#include

#include

#include

#include

char A[8][8]={

{ 0, 1, 1,-1, 1,-1,-1,-1},

{-1, 0,-1, 1,-1,-1,-1,-1},

{ 1,-1, 0, 1,-1,-1, 1,-1},

{-1, 1,-1, 0,-1,-1,-1,-1},

{-1,-1,-1,-1, 0,-1, 1,-1},

{-1, 1,-1,-1, 1, 0,-1, 1},

{-1,-1,-1,-1, 1,-1, 0,-1},

{-1,-1,-1, 1,-1, 1, 1, 0}};

char visited[8]={0,0,0,0,0,0,0,0};

char path[8]={-1,-1,-1,-1,-1,-1,-1,-1};

int len=0;

char transform(char str[])

{

if(strcmp("---",str)==0) return 0;

if(strcmp("--+",str)==0) return 1;

if(strcmp("-+-",str)==0) return 2;

if(strcmp("-++",str)==0) return 3;

if(strcmp("+--",str)==0) return 4;

if(strcmp("+-+",str)==0) return 5;

if(strcmp("++-",str)==0) return 6;

if(strcmp("+++",str)==0) return 7;

return -1;

}

void print(char state)

{

switch(state)

{ //case -1:printf("ERROR");break;

case 0:printf("---");break;

case 1:printf("--+");break;

case 2:printf("-+-");break;

case 3:printf("-++");break;

case 4:printf("+--");break;

case 5:printf("+-+");break;

case 6:printf("++-");break;

case 7:printf("+++");break;

}

}

void search(char state)

{

int i;

visited[state]=1;

path[len++]=state;

if(state==transform("+++"))//目标状态{

for(i=0;i

{

print(path[i]);

printf("\n");

}

printf("Mission\n\n");

visited[state]=0;path[--len]=-1;

return;

}

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

{

if(A[state][i]>0&&visited[i]==0)

{

search(i);

}

相关文档
最新文档