c实现野人过河问题
来源:互联网 发布:新顶级域名注册量排名 编辑:程序博客网 时间:2024/04/28 06:34
// Savage.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
struct Member
{
int savage;
int missionary;
Member();
Member(int m,int s)
{
missionary = m;
savage = s;
}
};
bool Check(Member left,Member right)
{
if ((left.missionary>=left.savage)||(left.missionary==0))
{
if ((right.missionary>=right.savage)||(right.missionary==0))
{
return true;
}
}
return false;
}
bool SavageLToR(Member left,Member right,int code);
bool SavageRToL(Member left,Member right,int code);
bool SavageLToR(Member left,Member right,int code)
{
/* bool flag = false;*/
if (!Check(left,right))
{
return false;
}
if ((left.missionary==0)&&(left.savage==0))
{
return true;
}
if (code != 1)
{
if ((left.missionary>=1)&&(left.savage>=1))
{
if (Check(Member(left.missionary-1,left.savage-1),Member(right.missionary+1,right.savage+1)))
{
if(SavageRToL(Member(left.missionary-1,left.savage-1),Member(right.missionary+1,right.savage+1),1))
{
return true;
}
}
}
}
if (code != 2)
{
if (left.missionary>=2)
{
if (Check(Member(left.missionary-2,left.savage),Member(right.missionary+2,right.savage+0)))
{
if(SavageRToL(Member(left.missionary-2,left.savage),Member(right.missionary+2,right.savage+0),2))
{
return true;
}
}
}
}
if (code != 3)
{
if (left.savage>=2)
{
if (right.missionary>=right.savage)//限制死循环
{
if (Check(Member(left.missionary-0,left.savage-2),Member(right.missionary+0,right.savage+2)))
{
if(SavageRToL(Member(left.missionary-0,left.savage-2),Member(right.missionary+0,right.savage+2),3))
{
return true;
}
}
}
}
}
if (code != 4)
{
if (left.missionary>=1)
{
if (Check(Member(left.missionary-1,left.savage-0),Member(right.missionary+1,right.savage+0)))
{
if(SavageRToL(Member(left.missionary-1,left.savage-0),Member(right.missionary+1,right.savage+0),4))
{
return true;
}
}
}
}
if (code != 5)
{
if (left.savage>=1)
{
if (Check(Member(left.missionary-0,left.savage-1),Member(right.missionary+0,right.savage+1)))
{
if(SavageRToL(Member(left.missionary-0,left.savage-1),Member(right.missionary+0,right.savage+1),5))
{
return true;
}
}
}
}
return false;
}
bool SavageRToL(Member left,Member right,int code)
{
if ((left.missionary==0)&&(left.savage==0))
{
return true;
}
if (code != 4)
{
if (right.missionary>=1)
{
if (Check(Member(left.missionary+1,left.savage+0),Member(right.missionary-1,right.savage-0)))
{
if(SavageLToR(Member(left.missionary+1,left.savage+0),Member(right.missionary-1,right.savage-0),4))
{
return true;
}
}
}
}
if (code != 5)
{
if (right.savage>=1)
{
if (Check(Member(left.missionary+0,left.savage+1),Member(right.missionary-0,right.savage-1)))
{
if(SavageLToR(Member(left.missionary+0,left.savage+1),Member(right.missionary-0,right.savage-1),5))
{
return true;
}
}
}
}
// if (code != 1)//无意义,导致死循环
// {
// if ((right.missionary>=1)&&(right.savage>=1))
// {
// if (Check(Member(left.missionary+1,left.savage+1),Member(right.missionary-1,right.savage-1)))
// {
// if(SavageLToR(Member(left.missionary+1,left.savage+1),Member(right.missionary-1,right.savage-1),1))
// {
// return true;
// }
// }
// }
// }
if (code != 2)
{
if (right.missionary>=2)
{
if (Check(Member(left.missionary+2,left.savage),Member(right.missionary-2,right.savage-0)))
{
if(SavageLToR(Member(left.missionary+2,left.savage),Member(right.missionary-2,right.savage-0),2))
{
return true;
}
}
}
}
if (code != 3)
{
if (right.savage>=2)
{
if (left.missionary!=(right.savage+left.savage))//限制死循环
{
if (Check(Member(left.missionary+0,left.savage+2),Member(right.missionary-0,right.savage-2)))
{
if(SavageLToR(Member(left.missionary+0,left.savage+2),Member(right.missionary-0,right.savage-2),3))
{
return true;
}
}
}
}
}
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
for (int i=0;i<10;i++)
{
for (int j=0;j<10;j++)
{
Member left(i,j);
Member Right(0,0);
if (j==3)
{
j=3;
}
if (SavageLToR(left,Right,0))
{
printf("%d,%d: ok\n",i,j);
}
else
{
printf("%d,%d: no\n",i,j);
}
}
}
return 0;
}
//
#include "stdafx.h"
struct Member
{
int savage;
int missionary;
Member();
Member(int m,int s)
{
missionary = m;
savage = s;
}
};
bool Check(Member left,Member right)
{
if ((left.missionary>=left.savage)||(left.missionary==0))
{
if ((right.missionary>=right.savage)||(right.missionary==0))
{
return true;
}
}
return false;
}
bool SavageLToR(Member left,Member right,int code);
bool SavageRToL(Member left,Member right,int code);
bool SavageLToR(Member left,Member right,int code)
{
/* bool flag = false;*/
if (!Check(left,right))
{
return false;
}
if ((left.missionary==0)&&(left.savage==0))
{
return true;
}
if (code != 1)
{
if ((left.missionary>=1)&&(left.savage>=1))
{
if (Check(Member(left.missionary-1,left.savage-1),Member(right.missionary+1,right.savage+1)))
{
if(SavageRToL(Member(left.missionary-1,left.savage-1),Member(right.missionary+1,right.savage+1),1))
{
return true;
}
}
}
}
if (code != 2)
{
if (left.missionary>=2)
{
if (Check(Member(left.missionary-2,left.savage),Member(right.missionary+2,right.savage+0)))
{
if(SavageRToL(Member(left.missionary-2,left.savage),Member(right.missionary+2,right.savage+0),2))
{
return true;
}
}
}
}
if (code != 3)
{
if (left.savage>=2)
{
if (right.missionary>=right.savage)//限制死循环
{
if (Check(Member(left.missionary-0,left.savage-2),Member(right.missionary+0,right.savage+2)))
{
if(SavageRToL(Member(left.missionary-0,left.savage-2),Member(right.missionary+0,right.savage+2),3))
{
return true;
}
}
}
}
}
if (code != 4)
{
if (left.missionary>=1)
{
if (Check(Member(left.missionary-1,left.savage-0),Member(right.missionary+1,right.savage+0)))
{
if(SavageRToL(Member(left.missionary-1,left.savage-0),Member(right.missionary+1,right.savage+0),4))
{
return true;
}
}
}
}
if (code != 5)
{
if (left.savage>=1)
{
if (Check(Member(left.missionary-0,left.savage-1),Member(right.missionary+0,right.savage+1)))
{
if(SavageRToL(Member(left.missionary-0,left.savage-1),Member(right.missionary+0,right.savage+1),5))
{
return true;
}
}
}
}
return false;
}
bool SavageRToL(Member left,Member right,int code)
{
if ((left.missionary==0)&&(left.savage==0))
{
return true;
}
if (code != 4)
{
if (right.missionary>=1)
{
if (Check(Member(left.missionary+1,left.savage+0),Member(right.missionary-1,right.savage-0)))
{
if(SavageLToR(Member(left.missionary+1,left.savage+0),Member(right.missionary-1,right.savage-0),4))
{
return true;
}
}
}
}
if (code != 5)
{
if (right.savage>=1)
{
if (Check(Member(left.missionary+0,left.savage+1),Member(right.missionary-0,right.savage-1)))
{
if(SavageLToR(Member(left.missionary+0,left.savage+1),Member(right.missionary-0,right.savage-1),5))
{
return true;
}
}
}
}
// if (code != 1)//无意义,导致死循环
// {
// if ((right.missionary>=1)&&(right.savage>=1))
// {
// if (Check(Member(left.missionary+1,left.savage+1),Member(right.missionary-1,right.savage-1)))
// {
// if(SavageLToR(Member(left.missionary+1,left.savage+1),Member(right.missionary-1,right.savage-1),1))
// {
// return true;
// }
// }
// }
// }
if (code != 2)
{
if (right.missionary>=2)
{
if (Check(Member(left.missionary+2,left.savage),Member(right.missionary-2,right.savage-0)))
{
if(SavageLToR(Member(left.missionary+2,left.savage),Member(right.missionary-2,right.savage-0),2))
{
return true;
}
}
}
}
if (code != 3)
{
if (right.savage>=2)
{
if (left.missionary!=(right.savage+left.savage))//限制死循环
{
if (Check(Member(left.missionary+0,left.savage+2),Member(right.missionary-0,right.savage-2)))
{
if(SavageLToR(Member(left.missionary+0,left.savage+2),Member(right.missionary-0,right.savage-2),3))
{
return true;
}
}
}
}
}
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
for (int i=0;i<10;i++)
{
for (int j=0;j<10;j++)
{
Member left(i,j);
Member Right(0,0);
if (j==3)
{
j=3;
}
if (SavageLToR(left,Right,0))
{
printf("%d,%d: ok\n",i,j);
}
else
{
printf("%d,%d: no\n",i,j);
}
}
}
return 0;
}
- c实现野人过河问题
- Java实现传教士与野人过河问题
- 传教士野人过河问题
- 野人过河问题
- 传教士 野人 过河问题
- 野人过河问题
- 野人过河问题
- 野人过河问题(一)
- 野人过河问题
- 野人传教士过河问题
- 野人和传教士过河问题的C语言源代码
- 传教士和野人过河问题
- 野人与传教士过河问题
- 传教士野人过河问题---Java版本
- C++习题:野人与修道士过河问题
- 传教士与野人过河问题(一)
- 传教士与野人过河问题(二)
- c实现农夫过河问题
- oracle获取当前年月日时分秒季度周
- iOS开发 关于键盘高度
- Hadoop 使用Combiner提高Map/Reduce程序效率
- ICU FAQs
- Mysql 查看连接数 查看Mysql数据库文件位置 mysql清空表内数据
- c实现野人过河问题
- 在 Windows Server 2008 (R2)上的IE9不支持HTML5 视频与音频解决办法
- map和list
- 选择ORACLE数据库字符集
- WebService之Axis2系列教程(五)会话(Session)管理
- VC 添加对话框右键菜单方法
- hadoop中map和reduce的数量设置问题
- windows mobile终止一个指定的进程
- Android布局文件的属性值解析