九宫格实现算法.docVIP

  • 12
  • 0
  • 约7.07千字
  • 约 9页
  • 2017-01-06 发布于贵州
  • 举报
九宫格实现算法九宫格实现算法

实验目的:通过visual c++进行算法编辑,准确掌握算法运行方式及流程。 通过程序实现类似九宫格的拼图效果,也叫做八方块。用最快的时间实现最后的效果:1 2 3 4 5 6 7 8 0 实验原理:先实现一个三行三列数组,再依次比较第一个数与上下左右数值的大小,进行移动,最后实现效果图。计算出一共移动的步数和每移一步的效果。 实验内容: 程序代码如下: // 8block.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h #include stdio.h #include stdlib.h #include time.h #define GOAL 123804765//表示我们要找得目标状态 struct Node { short state[9];//存放结点的状态 short pos;//空格所在的位置,在数组中用0代表空格 struct Node *up;//空格上移后的状态 struct Node *down;//空格下移后的状态 struct Node *left;//空格左移后的状态 struct Node *right;//空格右移后的状态 struct Node *parent;//它是从哪一状态变换而来的 struct Node *next;//表示在队列中的下一个状态 } ; struct Tree { short key;//表示当前结点的数值 short * state;//表示当前状态的整个数组,当整颗树生成完毕后这一数组将被释放 short index;//表示当前数值在数组中的位置 bool visited;//对于叶子结点而言,表示这一结点是否被访问过 struct Tree * next;//指向它的(下一个)兄弟结点,表示这一位置的下一个数 struct Tree *down;//指向它的第一个孩子结点,表示下一位置的第一个数 }; struct Queue//定义一个队列用于广度优先遍历 { struct Node * front; struct Node * rear; }; void InitQueue(struct Queue *Q);//初始化一个空队列 bool QueueEmpty(struct Queue *Q);//判断队列是否为空 void EnQueue(struct Queue *Q,struct Node *N);//入队列 struct Node * DeQueue(struct Queue *Q);//出队列,返回队结点 void ClearQueue(struct Queue *Q);//清空队列 struct Node * GetBestPath(struct Node *tree);//找到一个最短路径,并返回最后的状态结点,如果没有路径返回NULL struct Tree * CreateCheckTree();//生成一个用于检查状态的查询树 void CreateSubCheckTree(struct Tree * T);//生成状态检查子树 void FreeCheckTree(struct Tree * checkTree);//释放状态检查树的空间 int checkCount=0;//检查结点状态次数 int deCount=0;//出队列次数 int enCount=0;//入队列次数 struct Tree * checkTree; void main() { struct Node* tree=new struct Node; tree-parent=NULL; printf(输入0-8的任意一个排列,其中0表示空格所在的位置:\n); for(int i=0;i=8;i++) { scanf(%d,tree-state[i]); } for(int i=0;i=8;i++) { if(tree-state [i]==0) { tree-pos =i; } } tree-next =NULL; int c1=clock(); struct Node *result=GetBestPath(tree); int c2=clock(); double t=(c2-c1)/1000.0; printf(状态检查次数:%d,入队列次数:=%d,出队列次数:%d\n,checkCount,enCount,deCount); if(result!=NULL) { int pat

文档评论(0)

1亿VIP精品文档

相关文档