资源简介
数据结构农夫过河.rar

代码片段和文件信息
#include
#include
#define TRUE 1
#define FALSE 0
#define MAXSIZE 16
#define INFINTITY 65535
using namespace std;
int visited[MAXSIZE];
int ray[MAXSIZE];
int bay[MAXSIZE][MAXSIZE];//存储 遍历的节点
int sum =0; //下标
int sums =0; //下标
int k=0; //记录数组的长度
int step=0; //步骤
typedef int EdgeType; //图
typedef int Status; //创建一个栈用
typedef int SElemType;//栈
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
typedef struct{
int farmer;
int wolf;
int sheep;
int cabbage;
}status;
typedef struct
{
int stanum; //顶点个数
status vexs[MAXSIZE]; //储存顶点数组
EdgeType arc[MAXSIZE][MAXSIZE]; //邻接矩阵权值
}MGraph;
Status InitStak_Sq(SqStack &S){
S.base=new SElemType[100];
if(!S.base){
exit(0);
}
S.top=S.base;
S.stacksize=100;
return 0;
}
int Push_Sq(SqStack &Sint e){
if(S.top-S.base==S.stacksize){
return -1;
}
*S.top++=e;
return 0;
}
int Pop_Sq(SqStack &S){
if(S.top==S.base){
return -1;
}
return *--S.top;
}
int isEmpty(SqStack S){
if(S.top==S.base){
return false;
}else {
return true;
}
}
//判断节点是否安全
int isSafe(int farmerint wolfint sheepint cabbage){
if((wolf==sheep&&farmer!=wolf)||(sheep==cabbage&&farmer!=sheep)){
return FALSE;
}else {
return TRUE;
}
}
//判断节点是否有联系
int trueMove(MGraph Gint iint j){
int number=0;//农夫带过河的物品个数
if(G.vexs[i].farmer==G.vexs[j].farmer){
return false; //农夫没有移动
}
if(G.vexs[i].cabbage!=G.vexs[j].cabbage){
number++;
}
if(G.vexs[i].sheep!=G.vexs[j].sheep){
number++;
}
if(G.vexs[i].wolf!=G.vexs[j].wolf){
number++;
}
if(number>1){
return false;
}else{
return true;
}
}
//创建图
void CreateUDG(MGraph &G){
G.stanum=0;
for(int i=0;i<=1;i++){
for(int j =0;j<=1;j++){
for(int k=0;k<=1;k++){
for(int l=0;l<=1;l++){
if(isSafe(ijkl)){//判断节点是否是安全的节点
G.vexs[G.stanum].farmer=i;
G.vexs[G.stanum].wolf=j;
G.vexs[G.stanum].sheep=k;
G.vexs[G.stanum].cabbage=l;
G.stanum++;
}
}
}
}
}
for(int i=0;i for(int j=0;j if(trueMove(Gij)){
G.arc[i][j]=TRUE;
}else {
G.arc[i][j]=INFINTITY;
}
}
}
}
//深度优先遍历
void DFS(MGraph GSqStack &Sint i)
{
if(G.vexs[i].farmer==1&&G.vexs[i].wolf==1&&G.vexs[i].sheep==1&&G.vexs[i].cabbage==1){
k=0;
while(isEmpty(S)){
bay[sum][sums++]=Pop_Sq(S);k++;
}
for(int i=sums-1;i>=0;i--){
Push_Sq(Sbay[sum][i]);
}
sum++;sums=0;
}
for(int j=0;j if(G.arc[i][j]!=INFINTITY&&!visited[j]){
visited[j]=TRUE;//标记为访问状态
Push_Sq(Sj);
DFS(GSj);
visited[j]=FALSE;
Pop_Sq(S);
}
}
}
void TraverseDFS(MGraph GSqStack &S){
for(int i=0;i visited[i]=FALSE;//初始化访问前的状态
ray[i]=-1;
}
visited[0]=TRUE;
Push_Sq(S0);
DFS(GS0);
}
int find(MGraph Gint m)
{
for(int i=0;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7114 2018-06-15 08:09 数据结构农夫过河.cpp
----------- --------- ---------- ----- ----
7114 1
- 上一篇:武汉理工大学刘军老师操作系统实验报告
- 下一篇:IST8310三轴磁力计PCB封装
相关资源
- PID_AutoTune_v0.rar
- vspd7.2.308.zip
- 价值2k的H漫画小说系统
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- ddos压力测试工具99657
- UML建模大全
- 开源1A锂电池充电板TP4056原理图+PCB
- m1卡 ic卡可选择扇区初始化加密软件
- TSCC.exe
- FTP课程设计(服务端+客户端)
- 计算机图形学 边填充算法实现代码
- 电力系统潮流计算程序集合
- oracle数据迁移项目实施方案
- Web Api 通过文件流 文件到本地
- Visio图标-最新最全的网络通信图标库
- Spire API文档
- OpenGL参考手册
- Python中Numpy库最新教程
- SPD博士V5.3.exe
- 直流无刷电机方波驱动 stm32 例程代码
- layui后台管理模板
- 仿知乎界面小程序源代码
- 云平台-阿里云详细介绍
- photoshop经典1000例
- scratch垃圾分类源码(最终版本).sb
- IAR ARM 7.8破解
- TI CCS V5.4 安装步骤及破解文件
- 松下plc FP-XH的驱动
- 局域网硬件信息收集工具
- 加快Windows XP操作系统开机速度
评论
共有 条评论