人工智能的野人过河问题[附代码]

本文介绍了使用C#编程解决传教士与野人过河问题,确保任何时刻传教士数量不少于野人,以防止野人吃掉传教士。程序考虑了3个传教士和3个野人,船载重2人的特殊情况,并提供了关键算法代码。
摘要由CSDN通过智能技术生成

的确,时间能改变一切。不过从物理学的角度来说,时间的作用的确是改变一切,因为对一个事物而言,不同状态总是在不同的时间才有意义。


今天解决了用程序实现野人过河的问题了,感觉很不错。


程序运行的界面如下:

野人过河运行效果图

问题描述:
有M个传教士和N个野人来到河边渡河,河岸有Q条船,每次至多可供K人乘渡。问传教士为了安全起见,应如何规划摆渡方案,使得任何时刻,河两岸以及船上的野人数目总是不超过传教士的数目(否则不安全,传教士有可能被野人吃掉)。即求解传教士和野人从左岸全部摆渡到右岸的过程中,任何时刻满足M(传教士数)≥C(野人数)和M+C≤k的摆渡方案。
本程序只讨论N=M为3、k为2Q=1乘渡问题.程序用C#编写,主要算法代码为:


 

if((nowstate[0]>=oper[i,0]&&nowstate[1]>=oper[i,1])||(((nowstate[0]+oper[i,0])<=_I[0])&&((nowstate[1]+oper[i,1])<=_I[1])))
//将该状态中的传教士人数和野人数目与当前操作进行比较,判断能不能进行操作    if(((nowstate[0]-oper[i,0])>=(nowstate[1]-oper[i,1]))||((nowstate[0]-oper[i,0])==0))//判断操作后的状态是否正常
     {
      if(OP_type=="OR")
      {根据左操作和右操作进行操作
       tempstate=new int[]{(nowstate[0]-oper[i,0]),(nowstate[1]-oper[i,1]),0};
      }
      else
      {
       tempstate=new int[]{(temp_nowstate[0]+oper[i,0]),(temp_nowstate[1]+oper[i,1]),1};
      }//在状态空间内判断该准状态是否是合法的状态
      if(_ContainsStack(_project_state,tempstate))
      {continue;}
      for(int state=0;state<this._S.GetLongLength(0);state++)
      {
       int []d=_S[state];
       if(this._equalarray(d,tempstate))
       {//判断两个数组是否相等
        this._project_state.Push(tempstate);
        return true;进行操作并返回
       }
      }
     }
           }
==================
///问题说明:假设3个传教士和3个野人一起过河,船的载重为2,开始所有的人和物在左岸
///S:所有合法状态                                         {传教士数,野人数,船状态};
///O包含:PL,PR。PL:左操作;PR:右操作;{}                  {传教士数,野人数}
///I:问题的初始状态;G:问题的目标状态。I,G都必须在S集合中。
 int [][] _S:用来存合法状态集
 int [,] _PL, int [,] _PR:用来存储操作集
 int [] _I, int [] _G:用来存储初始状态和解状态
 Stack _project_state:用来存储解的过程

/
///问题说明:假设3个传教士和3个野人一起过河,船的载重为2,开始所有的人和物在左岸
///S:所有合法状态                                         {传教士数,野人数,船状态};
///O包含:PL,PR。PL:左操作;PR:右操作;{}                  {传教士数,野人数} 
///I:问题的初始状态;G:问题的目标状态。I,G都必须在S集合中。

using  System;
using  System.Drawing;
using  System.Collections;
using  System.ComponentModel;
using  System.Windows.Forms;
using  System.Data;

namespace  uncivilized_Problem
{
    
/// <summary>
    
/// Form1 的摘要说明。
    
/// </summary>

    public class Form1 : System.Windows.Forms.Form
    
{
        
...
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值