- 浏览: 842461 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (530)
- Java编程 (64)
- C/C++/D (6)
- .Net/C# (9)
- Ruby (12)
- JavaScript (77)
- XML (1)
- JSON (1)
- Ajax (17)
- ExtJs (81)
- YUI (1)
- JQuery (7)
- DWR (1)
- HTML (7)
- CSS (7)
- Database (6)
- PowerDesigner (23)
- DB2 (2)
- Oracle (57)
- MS SQL Server (8)
- MySQL (6)
- JSP/Servlet/JSTL/TagLib (3)
- Spring (1)
- Hibernate (0)
- iText (0)
- Struts (0)
- Struts2 (0)
- iReport (0)
- FreeMarker (0)
- HttpClient (1)
- POI (6)
- FckEditor (15)
- Eclipse / MyEclipse (10)
- IntelliJ IDEA (0)
- NetBeans (0)
- Tomcat (11)
- WebLogic (1)
- Jboss (3)
- jetty (4)
- IIS (2)
- CVS/VSS (1)
- FTP (1)
- Windows/DOS (6)
- Linux/Unix (0)
- 软件建模 UML (0)
- Design Pattern & Thinking In Programming (10)
- 数据结构与算法 (12)
- 软件项目管理 (9)
- 行业应用解决方案 (3)
- 电脑软件与故障解决 (13)
- 编程语言 (1)
- 十万个为什么 (3)
- JBPM (2)
- sysbase (2)
- JDBC (8)
- Ant (2)
- Case-计算机辅助软件工程 (1)
- WebService (4)
- 浏览器 (1)
最新评论
-
gaoqiangjava:
同一楼,还请大手帮解决
JAVA读取word文件 -
hyl523:
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对 ...
javascript面向对象之二 命名空间 -
ping12132200:
ping12132200 写道我抱着个错不是因为:body标签 ...
extjs在IE报对象不支持此属性或方法 -
ping12132200:
我抱着个错不是因为:body标签内的第一个元素不能为文本tex ...
extjs在IE报对象不支持此属性或方法 -
fireinjava:
呀,不错,转走了,谢谢啦~
利用OpenOffice将word转换成PDF
一、实验题目
使用有限自动机编程解决如下问题:有一个人带着狼、羊和草来到河的左岸。左岸只有一条无人摆渡的船,这个人要从左岸过河到右岸。可是这条船最多只能装一个人和其他三者之一,否则便会沉没。如果没有人看管,狼会吃掉羊,或者羊吃掉草。问如何过河才能保证羊和草的安全?
二、题目分析
W代表狼,G代表草,S代表羊,M代表人。初始状态”WSGM_”,结束状态”_WSGM”。人单独过河用字符m 表示,人带狼过河用字符w表示,人带羊过河用字符s 表示,人带草过河用字符g 表示。
三、程序代码
1、源文件head.h内容
Code:
- #include <cstdlib>
- #include <iostream>
- #include <string.h>
- using namespace std;
- class State;
- class List{
- List *next;
- char input;
- State *output;
- List(char in,State *out);
- ~List();
- friend class State;
- };
- class State{
- char *name;
- List *list;
- static State *error;
- public:
- void enList(char in,State *out);
- const State *next(char in)const;
- const State *start(char *)const;
- State(char *name);
- ~State();
- };
- if(name==0){ error=this; return; }
- State::name=new char[strlen(name)+1];
- strcpy(State::name, name);
- }
- void State::enList(char in, State *out){ //插入list
- List *temp;
- if(list==0){
- list=new List(in, out);
- return;
- }
- temp=new List(in, out);
- temp->next = list;
- list=temp;
- }
- const State *State::next(char in)const{ //输入in 转移到下一个状态
- List *temp=list;
- if(this==error) return error;
- while(temp)
- if(temp->input==in) return temp->output;
- else temp=temp->next;
- return error;
- }
- const State *State::start(char *s)const{ //启动有限自动机
- const State *temp = this;
- while(*s) temp=temp->next(*s++);
- return temp;
- }
- State::~State( ){
- if(name) { delete name; name=0; }
- if(list) {delete list; list=0; }
- }
3、源文件List.cpp内容
Code:
- #include"head.h"
- List::List(char in, State *out){
- input=in;
- output=out;
- next=0;
- }
- List::~List( ){
- if(this->next){ delete this->next;}
- }
4、源文件lab1.cpp内容
Code:
- #include"head.h"
- int main( ){
- State start("WSGM_");
- State stop("_WSGM");
- State error(0);
- State WG_SM("WG_SM");
- State WGM_S("WGM_S");
- State G_WSM("G_WSM");
- State SGM_W("SGM_W");
- State W_SGM("W_SGM");
- State WSM_G("WSM_G");
- State S_WGM("S_WGM");
- State SM_WG("SM_WG");
- start.enList('S', &WG_SM);
- WG_SM.enList('S', &start);
- WG_SM.enList('M', &WGM_S);
- WGM_S.enList('M', &WG_SM);
- WGM_S.enList('W', &G_WSM);
- WGM_S.enList('G', &W_SGM);
- G_WSM.enList('W', &WGM_S);
- W_SGM.enList('G', &WGM_S);
- G_WSM.enList('S', &SGM_W);
- SGM_W.enList('S', &G_WSM);
- SGM_W.enList('G', &S_WGM);
- S_WGM.enList('G', &SGM_W);
- W_SGM.enList('S', &WSM_G);
- WSM_G.enList('S', &W_SGM);
- WSM_G.enList('W', &S_WGM);
- S_WGM.enList('W', &WSM_G);
- S_WGM.enList('M', &SM_WG);
- SM_WG.enList('M', &S_WGM);
- SM_WG.enList('S', &stop);
- stop.enList('S', &SM_WG);
- if(start.start("SMWSGMSSS")==&stop) cout<<"过河成功!\n";
- else cout<<"过河失败!\n";
- getchar();
- return 1;
- }
四、实验结果
Code:
- #include"head.h"
- // 用M 表示人 用W 表示野人 B代表船
- // 初始状态为"BMMMYYY_" 终止状态为 "_BMMMYYY"
- //过河动作可以有五种:人单独过河s 两个人过河d 野人单独过河w 两个野人过河t人带着野人过河b
- int main( ){
- char m[80];
- State error(0);
- State start("start");//BMMMYYY_
- State MMMY_BYY("MMMY_BYY");//1
- State MMYY_BMY("MMYY_BMY");//2
- State BMMMYY_Y("BMMMYY_Y");//3
- State MMM_BYYY("MMM_BYYY");//4
- State BMMMY_YY("BMMMY_YY");//5
- State MY_BMMYY("MY_BMMYY");//6
- State BMMYY_MY("BMMYY_MY");//7
- State YY_BMMMY("YY_BMMMY");//8
- State BYYY_MMM("BYYY_MMM");//9
- State Y_BMMMYY("Y_BMMMYY");//10
- State BMY_MMYY("BMY_MMYY");//11
- State BYY_MMMY("BYY_MMMY");//12
- State stop("stop");//_BMMMYYY
- start.enList('t',&MMMY_BYY);
- start.enList('b',&MMYY_BMY);
- MMMY_BYY.enList('t',&start);
- MMMY_BYY.enList('w',&BMMMYY_Y);
- MMYY_BMY.enList('b',&start);
- MMYY_BMY.enList('s',&BMMMYY_Y);
- BMMMYY_Y.enList('w',&MMMY_BYY);
- BMMMYY_Y.enList('s',&MMYY_BMY);
- BMMMYY_Y.enList('t',&MMM_BYYY);
- MMM_BYYY.enList('t',&BMMMYY_Y);
- MMM_BYYY.enList('w',&BMMMY_YY);
- BMMMY_YY.enList('w',&MMM_BYYY);
- BMMMY_YY.enList('d',&MY_BMMYY);
- MY_BMMYY.enList('d',&BMMMY_YY);
- MY_BMMYY.enList('b',&BMMYY_MY);
- BMMYY_MY.enList('b',&MY_BMMYY);
- BMMYY_MY.enList('d',&YY_BMMMY);
- YY_BMMMY.enList('d',&BMMYY_MY);
- YY_BMMMY.enList('w',&BYYY_MMM);
- BYYY_MMM.enList('w',&YY_BMMMY);
- BYYY_MMM.enList('t',&Y_BMMMYY);
- Y_BMMMYY.enList('t',&BYYY_MMM);
- Y_BMMMYY.enList('s',&BMY_MMYY);
- Y_BMMMYY.enList('w',&BYY_MMMY);
- BMY_MMYY.enList('s',&Y_BMMMYY);
- BMY_MMYY.enList('b',&stop);
- BYY_MMMY.enList('w',&Y_BMMMYY);
- BYY_MMMY.enList('t',&stop);
- cout<<"人单独过河s 两个人过河d 野人单独过河w 两个野人过河t人带着野人过河b\n";
- cout<<"请输入:\n";
- cin>>m;
- getchar();
- if(start.start(m)==&stop) cout<<"过河成功!\n";
- else cout<<"过河失败!\n";
- getchar();
- return 1;
- }
四、实验结果
实验二
一、实验题目
有限自动机也可以解决三个修道士与三个野人的过河问题。假定船最多只能载两个修道士或者野人,野人服从修道士的指挥。 无论何时, 只要野人多于修道士, 野人就会吃掉修道士。 以有限自动机为基础, 编程解决三个修道士与三个野人的过河的问题。
二、问题分析
用M 表示人, 用W 表示野人,初始状态为"BMMMYYY_",结束状态” _BMMMYYY”。 过河动作可以有五种:人单独过河S, 两个人过河D, 野人单独过河W, 两个野人过河T, 人带着野人过河B。
三、程序代码
源文件lab2.cpp内容
Code:
- #include"head.h"
- // 用M 表示人 用W 表示野人 B代表船
- // 初始状态为"BMMMYYY_" 终止状态为 "_BMMMYYY"
- //过河动作可以有五种:人单独过河s 两个人过河d 野人单独过河w 两个野人过河t人带着野人过河b
- int main_10( ){
- char m[80];
- State error(0);
- State start("start");//BMMMYYY_
- State MMMY_BYY("MMMY_BYY");//1
- State MMYY_BMY("MMYY_BMY");//2
- State BMMMYY_Y("BMMMYY_Y");//3
- State MMM_BYYY("MMM_BYYY");//4
- State BMMMY_YY("BMMMY_YY");//5
- State MY_BMMYY("MY_BMMYY");//6
- State BMMYY_MY("BMMYY_MY");//7
- State YY_BMMMY("YY_BMMMY");//8
- State BYYY_MMM("BYYY_MMM");//9
- State Y_BMMMYY("Y_BMMMYY");//10
- State BMY_MMYY("BMY_MMYY");//11
- State BYY_MMMY("BYY_MMMY");//12
- State stop("stop");//_BMMMYYY
- start.enList('t',&MMMY_BYY);
- start.enList('b',&MMYY_BMY);
- MMMY_BYY.enList('t',&start);
- MMMY_BYY.enList('w',&BMMMYY_Y);
- MMYY_BMY.enList('b',&start);
- MMYY_BMY.enList('s',&BMMMYY_Y);
- BMMMYY_Y.enList('w',&MMMY_BYY);
- BMMMYY_Y.enList('s',&MMYY_BMY);
- BMMMYY_Y.enList('t',&MMM_BYYY);
- MMM_BYYY.enList('t',&BMMMYY_Y);
- MMM_BYYY.enList('w',&BMMMY_YY);
- BMMMY_YY.enList('w',&MMM_BYYY);
- BMMMY_YY.enList('d',&MY_BMMYY);
- MY_BMMYY.enList('d',&BMMMY_YY);
- MY_BMMYY.enList('b',&BMMYY_MY);
- BMMYY_MY.enList('b',&MY_BMMYY);
- BMMYY_MY.enList('d',&YY_BMMMY);
- YY_BMMMY.enList('d',&BMMYY_MY);
- YY_BMMMY.enList('w',&BYYY_MMM);
- BYYY_MMM.enList('w',&YY_BMMMY);
- BYYY_MMM.enList('t',&Y_BMMMYY);
- Y_BMMMYY.enList('t',&BYYY_MMM);
- Y_BMMMYY.enList('s',&BMY_MMYY);
- Y_BMMMYY.enList('w',&BYY_MMMY);
- BMY_MMYY.enList('s',&Y_BMMMYY);
- BMY_MMYY.enList('b',&stop);
- BYY_MMMY.enList('w',&Y_BMMMYY);
- BYY_MMMY.enList('t',&stop);
- cout<<"人单独过河s 两个人过河d 野人单独过河w 两个野人过河t人带着野人过河b\n";
- cout<<"请输入:\n";
- cin>>m;
- getchar();
- if(start.start(m)==&stop) cout<<"过河成功!\n";
- else cout<<"过河失败!\n";
- // if(start.start("twtwdbdwtwt")==&stop) cout<<"ok\n";
- // else cout<<"error\n";
- //
- // if(start.start("bstwdbdwtsb")==&stop) cout<<"ok\n";
- // else cout<<"error\n";
- getchar();
- return 1;
- }
发表评论
-
数据结构自学网站
2010-12-13 00:37 982http://student.zjzk.cn/course_w ... -
算法的时间复杂度(计算实例)
2010-07-04 14:54 1036定义:如果一个问题 ... -
大O表示法是什么?
2010-07-04 14:48 1194目录 一,算法的目标 二,算法的执行时间 ... -
常用的排序算法(包括冒泡排序,选择排序,插入排序,希尔排序,快速排序)
2010-01-13 23:29 1559排序算法在程序中会用到很多,这里介绍几种常见的排序方法以及比较 ... -
几个简单常用的排序算法(面试会遇到)
2010-01-13 23:29 14981:quicksort 下面这个示意图很生动的演示出来快速排序 ... -
C++常用排序算法
2010-01-13 23:28 977一、简单排序算法 由于程序比较简单,所以没有加什么注释。所 ... -
常用排序算法 c源码
2010-01-13 23:27 1076一、简单排序算法 由于程序比较简单,所以没有加什么注释。所有的 ... -
常用的排序算法
2010-01-13 23:26 10181选择排序 先在整个序列中选出关键字值最小的元素,如果它不是 ... -
例举四种常用排序算法
2010-01-13 23:25 860●插入排序(Insertion Sort)的基本思想是:每次将 ... -
几种常用的排序算法
2010-01-13 23:24 765C#几种常用的排序算法 ... -
B树、B-树、B+树、B*树
2010-01-09 20:30 1843B树 即二叉搜索树: ...
相关推荐
【EDA课设 过河游戏】是一个以经典数字游戏“过河”为主题的课程设计项目,主要涉及EDA(电子设计自动化)技术,使用FPGA(Field-Programmable Gate Array,现场可编程门阵列)作为核心硬件平台。在这个设计中,学生...
这个代码项目对于理解面向对象编程、事件驱动编程、状态机设计模式以及如何利用图形库进行界面开发都有很好的实践价值。通过分析和修改这段代码,学习者可以深入理解Qt框架,并提高问题解决和算法设计的能力。同时,...
- **直升机水平移动**:利用循环结构,逐步调整直升机的x坐标实现水平移动。 - **螺旋桨转动效果**:使用循环结合旋转指令,模拟螺旋桨转动。 - **直升机大小变化**:通过循环递减直升机的大小值,使其在移动过程中...
7. **深度优先搜索(DFS)或最小最大搜索(Minimax)**:为了实现计算机自动下棋,可以使用这些搜索算法结合Alpha-Beta剪枝,以评估棋局的优劣和预测对手的可能动作。 8. **局面评估函数**:在搜索算法中,需要一个...
实验目的:这是经典的过河方案规划问题,通过本实验的设计与编程实现让学生掌握基于状态空间知识表示方法的一般搜索策略。 实验内容:选择 c、c++、java 等编程语言设计并实现 3 个传教士和 3 个野人的过河方案。 ...
在本压缩包“c语言实现的象棋源码.rar”中,包含了一个使用C语言编写的中国象棋程序。这个程序展示了如何用低级编程语言来实现一个复杂的逻辑游戏,如象棋。以下是对该源码中涉及的关键知识点的详细说明: 1. **...
在编程领域,用C++实现中国象棋是一项挑战性的任务,它不仅涉及到基础的编程技术,还涉及到算法设计、对象模型构建以及人机交互等多个方面。这篇内容将深度解析这份由教师指导编写的C++中国象棋源代码,帮助读者理解...
- **案例2**:农夫过河问题 - 使用状态图表示不同状态,并通过图搜索找到从初始状态到目标状态的有效路径。 以上是对网络安全期末考试题中的知识点的详细总结,希望能帮助大家更好地理解和掌握相关概念和技术。
1. **gmexcopter.txt**:这可能是一个基于直升机飞行的小游戏,通过VBA编程实现游戏逻辑。玩家可能需要控制直升机避开障碍物,同时收集奖励。VBA在这里用于处理游戏的计分系统、碰撞检测、游戏循环和用户输入。 2. ...
32. **警察囚徒过河问题**:典型的约束问题,需要考虑各种组合可能性。 33. **找出热门URL**:可以使用布隆过滤器快速排除不在集合中的URL,然后用哈希表统计频率。 34. **兄弟单词**:使用回溯或动态规划,交换...
通过套接字(socket)技术,客户端和服务器可以交换游戏状态,实现远程对战。玩家可以在各自的设备上操作,游戏状态实时同步。 四、算法 在象棋游戏中,算法起着至关重要的作用,主要包括以下几点: 1. 棋盘逻辑:...