实验(变位字谜 )
来源:互联网 发布:发那科机器人编程软件 编辑:程序博客网 时间:2024/04/27 17:46
主程序:
#include"游戏函数.h"int main() { play_puzzle(); return 0;}
头文件:标头.h
#pragma once#include<iostream>#include<string>#include<cstdlib>using namespace std;typedef char elem_type;const int LIST_SIZE = 1000; //假设表容量是1000 //双向循环链表类型定义typedef struct Node { elem_type data; struct Node *prior, *next; //前驱指针prior,后继指针next struct Node *head, *rear; //链表头指针head,尾指针rear struct Node *cursor; //用于标记数据项的指针 int len; //表长}node, *dlinklist;void dlinklist_init(dlinklist &L); //创建空表void destroy(dlinklist &L); //销毁表,释放内存void insert(dlinklist &L, elem_type e); //插入数据,操作完成后当前指针指向该数据项void remove(dlinklist &L); //删除数据,如果删除的数据项在列表末尾,移动指针指向列表开始void replace(dlinklist &L, elem_type e); //用e替换指针标记的数据项void clear(dlinklist &L); //删除表中的所有数据项bool empty(dlinklist L); //表空,返回true,否则返回falsebool full(dlinklist L); //表满返回true,否则返回falsevoid go_to_beginning(dlinklist &L); //移动指针到表头void go_to_end(dlinklist &L); //移动指针到表尾void go_to_next(dlinklist &L); //移动指针到下一个数据项void go_to_prior(dlinklist &L); //移动指针到前一个数据项void show_cursor(dlinklist L); //返回指针所标记的数据项的值void show_structure(dlinklist L); //输出表中的数据项,如果表空,输出“Empty list”void error_message(string s); //错误提示函数,发生错误会输出s,并强制结束程序void help(); //提示输出void go(); //执行程序
头文件:基本函数.h
#pragma once#include "标头.h"void error_message(string s) { cout << s << endl; exit(-1);}void dlinklist_init(dlinklist &L) { L = new node; if (L == nullptr) error_message("内存分配失败"); L->head = L->rear = L->next = L->cursor = L->prior = L; L->len = 0;}void destroy(dlinklist &L) { node *p = L->head; node *q = nullptr; while (p != L->rear) { q = p->next; delete p; p = q; } delete L->rear;}void insert(dlinklist &L, elem_type e) { if (L->len >= LIST_SIZE) error_message("表已满,不能再插入"); node *tmp = new node; if (!tmp) error_message("内存分配失败"); tmp->data = e; tmp->next = L->cursor->next; tmp->prior = L->cursor; L->cursor->next->prior = tmp; L->cursor->next = tmp; L->len++; L->cursor = tmp; L->rear = L->prior;}void remove(dlinklist &L) { if (L->len == 0) error_message("表是空的,不能进行删除操作"); node *tmp = L->cursor->next; L->cursor->next->prior = L->cursor->prior; L->cursor->prior->next = L->cursor->next; delete L->cursor; L->cursor = tmp; L->len--;}void replace(dlinklist &L, elem_type e) { L->cursor->data = e;}void clear(dlinklist &L) { node *p = L->next; node *q = nullptr; while (p != L->rear) { q = p->next; delete p; p = q; } delete L->rear; L->head = L->rear = L->next = L->prior = L->cursor = L; L->len = 0;}bool empty(dlinklist L) { return L->len == 0;}bool full(dlinklist L) { return L->len == LIST_SIZE;}void go_to_beginning(dlinklist &L) { if (L->len>0) { L->cursor = L->head->next; //cout<<"指向表头: "; //cout<<L->cursor->data<<endl; } else cout << "表是空的,无法指向表头" << endl;}void go_to_end(dlinklist &L) { if (L->len>0) { L->cursor = L->rear; //cout<<"指向表尾: "<<L->cursor->data<<endl; } else cout << "表是空的,无法指向表尾" << endl;}void go_to_next(dlinklist &L) { if (L->cursor == L->rear) L->cursor = L->head->next; else L->cursor = L->cursor->next;}void go_to_prior(dlinklist &L) { if (L->cursor == L->head->next) L->cursor = L->rear; else L->cursor = L->cursor->prior;}void show_cursor(dlinklist L) { if (L->len>0) cout << L->cursor->data << endl; else cout << "表是空的,指针不指向元素,无法获取" << endl;}void show_structure(dlinklist L) { if (L->len == 0) { cout << "表是空的" << endl; return; } //cout<<"list: "; node *tmp = L->head->next; while (tmp != L->rear) { cout << tmp->data/*<<" "*/; tmp = tmp->next; } cout << L->rear->data/*<<endl*/;}
游戏函数.h
#pragma once#include"基本函数.h"//变位字谜数据类型构造typedef struct { dlinklist solution; //答案 dlinklist puzzle; //单词字母顺序打乱}puz;void init_puzzle(puz &p, string ans, string init);//创建一个字谜游戏void left_shift(puz &p); //所有字母左移一个单位void right_shift(puz &p);//所有字母右移一个单位void swap_ends(puz &p); //交换两端的字母void display(puz p); //显示字谜游戏bool is_solved(puz p);//如果字谜解决,返回true,否则返回falsevoid puzzle_help(); //游戏操作提示void play_puzzle(); //玩游戏void init_puzzle(puz &p, string ans, string init) { dlinklist_init(p.solution); dlinklist_init(p.puzzle); for (string::iterator it1 = ans.begin(), it2 = init.begin(); it1 != ans.end(), it2 != init.end(); it1++, it2++) { insert(p.solution, *it1); insert(p.puzzle, *it2); }}void left_shift(puz &p) { char tmp; go_to_beginning(p.puzzle); tmp = p.puzzle->cursor->data; while (p.puzzle->cursor != p.puzzle->rear) { go_to_next(p.puzzle); p.puzzle->cursor->prior->data = p.puzzle->cursor->data; } p.puzzle->rear->data = tmp;}void right_shift(puz &p) { char tmp; go_to_end(p.puzzle); tmp = p.puzzle->cursor->data; while (p.puzzle->cursor != p.puzzle->head->next) { go_to_prior(p.puzzle); p.puzzle->cursor->next->data = p.puzzle->cursor->data; } p.puzzle->cursor->data = tmp;}void swap_ends(puz &p) { char tmp = p.puzzle->head->next->data; p.puzzle->head->next->data = p.puzzle->rear->data; p.puzzle->rear->data = tmp;}void display(puz p) { cout << "字谜:"; show_structure(p.solution); cout << " ← "; show_structure(p.puzzle); cout << endl;}bool is_solved(puz p) { go_to_beginning(p.puzzle); go_to_beginning(p.solution); while (p.puzzle->cursor != p.puzzle->rear) { if (p.puzzle->cursor->data != p.solution->cursor->data) return false; go_to_next(p.puzzle); go_to_next(p.solution); } if (p.solution->rear->data != p.puzzle->rear->data) return false; return true;}void play_help() { cout << " ****************操作提示****************" << endl; cout << " |C →创建游戏 |" << endl; cout << " |--------------------------------------|" << endl; cout << " |L →所有字母左移一位,首字母移到最右边|" << endl; cout << " |--------------------------------------|" << endl; cout << " |R →所有字母右移一位,首字母移到最左边|" << endl; cout << " |--------------------------------------|" << endl; cout << " |S →交换两端的字母 |" << endl; cout << " |--------------------------------------|" << endl; cout << " |M →强行结束本局 |" << endl; cout << " |--------------------------------------|" << endl; cout << " |Q →退出游戏 |" << endl; cout << " ****************操作提示****************" << endl;}void play_puzzle() { play_help(); puz p; char c; string a, b; while (1) { cin >> c; switch (c) { case 'C': { cout << "请输入一个单词: "; cin >> a; cout << "请把刚才输入的单词字母顺序打乱,再输入: "; cin >> b; init_puzzle(p, a, b); cout << "游戏开始:"; display(p); cout << endl; break; } case 'L':left_shift(p); display(p); break; case 'R':right_shift(p); display(p); break; case 'S':swap_ends(p); display(p); break; case 'Q':cout << "欢迎再玩,游戏已退出" << endl; return; case 'M': { if (!is_solved(p)) { cout << "请再接再厉!" << endl; play_help(); } else { cout << "恭喜您过关" << endl; } break; } default: cout << "输入非法,请重新输入" << endl; break; } if (is_solved(p)) { cout << "恭喜您过关" << endl; play_help(); } }}
阅读全文
0 0
- 实验(变位字谜 )
- 字谜
- 字谜
- 字谜
- 英语字谜求解程序(JAVA):iMessage-GamePigeon的“字谜”
- 纵横字谜(基本框架)
- 纵横字谜(重构)
- 回环变位(algs4)
- 纵横字谜的答案(uva 232)
- 变位词(兄弟字符串)
- 第二章 啊哈!算法(变位词)
- 第二章 啊哈!算法(变位词)
- Valid Anagram(有效变位词)
- 变位词问题(字典问题)
- Valid Anagram(有效变位词)
- FZU1410 (map+sort)之 变位词
- 回环变位(2017校招一模-----循环单词)
- 变位词问题(字符的排列)
- Spark学习之SparkSession
- STM32单片机上位机程序代码(供参考)(基于C#开发)
- Ubuntu 下安装SublimeText Atom编辑器
- layer给iframe页面传值
- govendor使用笔记
- 实验(变位字谜 )
- icloud选择性备份iPhone7s的应用
- Bootstrap4(二十五)
- Git的简单操作(持续更新
- 重识java8
- Opencv-Python(二) 读取, 写入/出视频
- Bootstrap4(二十六)
- 协方差矩阵,埃尔米特矩阵,中心块矩阵,正定矩阵
- 用python从一个单词列表中快速生成word_to_ix字典