亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? class1.cs

?? 傳教士和野人渡河問題盲目搜索算法 一個典型的人工智能算法
?? CS
字號:

using System;

/*============================================================================


 *Content: 

      模擬野人過河問題, 問題描述如下: 

      有三個牧師和三個野人過河,只有一條能裝下兩個人的船,在河的任何一方或者船上,如果

      野人的人數大于牧師的人數,那么牧師就會有危險. 你能不能找出一種安全的渡河方法呢?

      假設河的兩岸分別是甲岸和乙岸, 剛開始時6個人都在甲岸, 目標狀態是六個人都在乙岸. 

 
======================================*/

 
namespace ConsoleApplication14
{
	/// <summary>
	/// Class1 的摘要說明。
	/// </summary>
	/// 
	public struct RIVERSIDE   // 岸邊狀態類型

	{

		public int wildMan;    // 野人數 

		public int churchMan;  // 牧師數

	};

 

	public struct BOAT  // 船的狀態類型

	{  

		public int wildMan;    // 野人數

		public int churchMan;  // 牧師數

	};

 

	public class QUESTION

	{

		public RIVERSIDE riverSide1;   // 甲岸

		public RIVERSIDE riverSide2;   // 乙岸

		public int side;                 // 船的位置, 甲岸為-1, 乙岸為1

		public BOAT boat;              // 船的狀態

		public QUESTION pPrev;        // 指向前一渡船操作

		public QUESTION pNext;        // 指向后一渡船操作

	};

 

	// 子函數聲明

	//public static int FindNext(QUESTION quest);

	//public static int Process(QUESTION quest);

 
	class Class1
	{
		/// <summary>
		/// 應用程序的主入口點。
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			// savage.cpp : 定義控制臺應用程序的入口點。
			QUESTION pHead = new QUESTION();

			pHead.riverSide1.wildMan = 3;

			pHead.riverSide1.churchMan = 3;

			pHead.riverSide2.wildMan = 0;

			pHead.riverSide2.churchMan = 0;

			pHead.side = -1;        // 船在甲岸

			pHead.pPrev = null;

			pHead.pNext = null;

			pHead.boat.wildMan = 0;

			pHead.boat.churchMan = 0;

 

			// 遞規調用, 遍歷鏈表

			if (Process(pHead))

			{

				char[] str =new char[256];
				

				Console.WriteLine("\n    野人過河問題, 描述如下: 話說有三個牧師和三個野人過河,只有一條能裝下兩個人的船,在河的任何一方或者船上,如果野人的人數大于牧師的人數, 那么牧師就會有危險. 你能不能找出一種安全的渡河方法呢?\n\n");

				Console.WriteLine("===========================渡河過程演示(盲目搜索)===========================");


				Console.WriteLine("  甲岸: 野人數|牧師數   渡河方向|載野人|載牧師   乙岸: 野人數|牧師數");

				QUESTION pQuest = pHead;

				while (pQuest!=null)

				{

					Console.WriteLine("\t   {0}\t {1}\t  {2}\t   {3}\t  {4}\t\t {5}\t  {6}", pQuest.riverSide1.wildMan, 

						pQuest.riverSide1.churchMan,  (pQuest.side == -1) ? "--->":"<---", pQuest.boat.wildMan,

						pQuest.boat.churchMan,pQuest.riverSide2.wildMan, pQuest.riverSide2.churchMan);

					pQuest = pQuest.pNext;

				}

				Console.WriteLine("===========================================================================");


			}
		}

					/* 回收內存空間

					while (pHead)

				{

					QUESTION pTemp = pHead.pNext;

					delete pHead;

					pHead=pTemp;

				}

			pHead = null;

				*/
 
 



 

//  渡船過程, 遞規調用函數FindNext(...)

public static bool Process(QUESTION pQuest)

{

     // 如果找到一步合適操作,就將其插入結果鏈表末尾

    if (FindNext(pQuest))

    {

         QUESTION pNew = new QUESTION();

         pNew.riverSide1.wildMan = pQuest.riverSide1.wildMan + pQuest.boat.wildMan*(pQuest.side);

         pNew.riverSide1.churchMan = pQuest.riverSide1.churchMan + pQuest.boat.churchMan*(pQuest.side);

        pNew.riverSide2.wildMan = 3 - pNew.riverSide1.wildMan;

         pNew.riverSide2.churchMan = 3 - pNew.riverSide1.churchMan;

         pNew.side = (-1)*pQuest.side;

         pNew.pPrev = pQuest;

         pNew.pNext = null;

         pNew.boat.wildMan = 0;

         pNew.boat.churchMan = 0;

         pQuest.pNext = pNew;

         if (pNew.riverSide2.wildMan==3 && pNew.riverSide2.churchMan==3) 

             return true; //  完成

         return Process(pNew);

    }

// 不能找到合適的渡河操作,就返回當前節點的父節點,即pQuest在結果鏈表中的上級節點,同時刪除pQuest節點

    else 

{

         QUESTION pPrev = pQuest.pPrev;

         if (pPrev == null)

             return false;         //  無解


         pPrev.pNext = null;

         return Process(pPrev);   // 返回其父節點重新再找

    }

   // return true;

}

 

// 判斷有否下一個渡河操作, 即根據比較算符找出可以接近目標節點的操作

// 算符共5個: 1野/ 1牧 / 1野1牧 / 2野 / 2牧 

public static bool FindNext(QUESTION pQuest)

{
    // 基本規則

    // 渡船的優先順序: 甲岸運多人優先, 野人優先; 乙岸運少人優先, 牧師優先.

    BOAT[] boatState=new BOAT[5];

    if (pQuest.side == -1)

    {

         boatState[0].wildMan = 2;

        boatState[0].churchMan = 0;

         boatState[1].wildMan = 1;

         boatState[1].churchMan = 1;

         boatState[2].wildMan = 0;

         boatState[2].churchMan = 2;

         boatState[3].wildMan = 1;

         boatState[3].churchMan = 0;

         boatState[4].wildMan = 0;

         boatState[4].churchMan = 1;

    }

    else

    {

         boatState[0].wildMan = 0;

        boatState[0].churchMan = 1;

         boatState[1].wildMan = 1;

         boatState[1].churchMan = 0;

         boatState[2].wildMan = 0;

         boatState[2].churchMan = 2;

         boatState[3].wildMan = 1;

         boatState[3].churchMan = 1;

         boatState[4].wildMan = 2;

         boatState[4].churchMan = 0;

    }

 

    int i;  // 用來控制算符

    if (pQuest.boat.wildMan == 0 && pQuest.boat.churchMan == 0) // 初始狀態, 第一次渡河時

         i = 0;  // 取算符1

    else

    {

     // 如果擴展A節點得到B和C兩個節點,然后假如說在繼續擴展B的時候失敗了,程序就需要返回到A節點,重新擴展,// 這個時候已經用過的算符就不能再用, 避免出現重新回到B節點。另外請注意我們選取算符是優先級的,比如說5

// 個算符中,第3個被用過了,那么第1、2個也肯定被用過了,那么現在就只能使用第4、5個了。

    for (i=0; i<5; i++) 

        if (pQuest.boat.wildMan == boatState[i].wildMan && pQuest.boat.churchMan == boatState[i].churchMan)

            break;

        i++;       

    } // end else

    

    if (i < 5)

    {

         int j;

         for (j=i; j<5; j++)

         {

             int nWildMan1 = pQuest.riverSide1.wildMan + boatState[j].wildMan * pQuest.side;

             int nChurchMan1 = pQuest.riverSide1.churchMan + boatState[j].churchMan * pQuest.side;

             int nWildMan2 = 3 - nWildMan1;

             int nChurchMan2 = 3 - nChurchMan1;

 

             //  判斷本次操作的安全性, 即牧師數量>=野人或牧師數為0

             if ((nWildMan1 <= nChurchMan1 || nChurchMan1 == 0) &&

                  (nWildMan2 <= nChurchMan2 || nChurchMan2 == 0) &&

                  nWildMan1 >=0 && nChurchMan1 >=0 && nWildMan2 >=0 && nChurchMan2 >= 0)

             {

                  //  本操作是否重復上次操作,注意方向不同

                  if (pQuest.pPrev != null)

                  {

                      if (pQuest.pPrev.boat.wildMan == boatState[j].wildMan &&

                          pQuest.pPrev.boat.churchMan == boatState[j].churchMan)

                      continue;

                  }//end if

                  break;  // 該操作可行, 推出循環

             }//end if

         }//end for

          // 找到合適渡船操作

         if (j < 5)

         {

             pQuest.boat.wildMan = boatState[j].wildMan;

             pQuest.boat.churchMan = boatState[j].churchMan;

             return true;

         }//end if

    }//end if

    return false;

}


		}
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品99久久久久久宅男| 91精品在线免费观看| 欧美午夜电影一区| 久久丝袜美腿综合| 无吗不卡中文字幕| 99国产一区二区三精品乱码| 精品久久一二三区| 日韩在线观看一区二区| 91美女片黄在线观看91美女| 欧美本精品男人aⅴ天堂| 水野朝阳av一区二区三区| 91免费看`日韩一区二区| 国产调教视频一区| 美女国产一区二区| 日韩一区二区在线免费观看| 亚洲国产精品久久久久婷婷884 | 亚洲国产美国国产综合一区二区| 国产高清久久久久| 精品精品国产高清a毛片牛牛| 天天操天天综合网| 欧美性视频一区二区三区| 亚洲人一二三区| 成a人片国产精品| 久久一夜天堂av一区二区三区| 亚洲va国产天堂va久久en| 在线观看日韩精品| 亚洲专区一二三| 在线视频你懂得一区二区三区| 国产精品久久久久aaaa| 成人一道本在线| 国产精品久久久久久福利一牛影视 | 韩国女主播一区| 日韩免费高清视频| 极品美女销魂一区二区三区免费 | 国产精品久久久久久久久免费相片| 国产一区 二区 三区一级| 精品国产凹凸成av人导航| 激情久久五月天| 日本一区二区视频在线观看| 成人午夜又粗又硬又大| 国产精品二三区| 日本高清不卡aⅴ免费网站| 一二三区精品视频| 欧美一区午夜精品| 国产一区二区三区久久悠悠色av| 2019国产精品| 不卡电影一区二区三区| 亚洲综合免费观看高清完整版在线| 欧美日韩三级在线| 久久国产三级精品| 中文字幕二三区不卡| 91成人在线精品| 久久99国产乱子伦精品免费| 欧美—级在线免费片| 在线免费视频一区二区| 久久精品国产久精国产爱| 国产精品免费视频网站| 欧美视频一二三区| 国产另类ts人妖一区二区| 亚洲你懂的在线视频| 4438成人网| 波多野结衣中文一区| 亚洲bdsm女犯bdsm网站| 国产欧美日韩精品一区| 色综合久久久久综合体| 捆绑紧缚一区二区三区视频| 亚洲欧美偷拍另类a∨色屁股| 51精品国自产在线| 99久免费精品视频在线观看| 婷婷综合久久一区二区三区| 日本一区二区三区四区在线视频 | 欧美无砖专区一中文字| 国产精品中文字幕一区二区三区| 亚洲欧洲日韩综合一区二区| 日韩视频在线你懂得| 91蜜桃网址入口| 国产综合久久久久影院| 亚洲www啪成人一区二区麻豆| 国产视频一区二区在线观看| 91精品国产综合久久精品app | 精品久久久久99| 欧美午夜电影一区| 成人一区二区三区视频在线观看 | 欧美成人精品高清在线播放| 日本精品一区二区三区高清| 国产伦精品一区二区三区在线观看| 亚洲精品成人少妇| 国产精品久久久久久久久果冻传媒 | 亚洲黄色片在线观看| 欧美激情综合在线| 日韩欧美国产一区二区在线播放| 欧美亚州韩日在线看免费版国语版| 国产成人在线视频免费播放| 午夜国产不卡在线观看视频| 有坂深雪av一区二区精品| 日本一区二区视频在线| 久久日韩精品一区二区五区| 91精品国模一区二区三区| 欧美性色黄大片手机版| 色综合色综合色综合| 成人激情免费视频| 国产不卡高清在线观看视频| 国产综合色在线视频区| 久久se精品一区二区| 日本不卡的三区四区五区| 午夜精品视频一区| 亚洲第一久久影院| 五月天网站亚洲| 日韩成人精品在线观看| 奇米一区二区三区| 久久99国产精品久久| 美女视频网站黄色亚洲| 麻豆精品视频在线观看免费| 久久精品国产在热久久| 老司机午夜精品99久久| 国产又黄又大久久| 国产精品一区二区x88av| 成人午夜精品一区二区三区| av亚洲精华国产精华| 91原创在线视频| 欧美在线短视频| 欧美久久高跟鞋激| 日韩视频中午一区| 国产视频一区在线播放| 亚洲人123区| 香蕉加勒比综合久久| 蜜桃av一区二区三区电影| 黑人精品欧美一区二区蜜桃 | 亚洲欧美日韩一区二区三区在线观看| 亚洲色图在线看| 五月天一区二区三区| 激情久久五月天| 99re这里只有精品6| 欧美日韩一区二区在线观看视频| 欧美日韩国产在线观看| 欧美精品一区二区三区蜜桃视频| 久久久99精品久久| 亚洲男同性视频| 看片网站欧美日韩| 99re这里都是精品| 欧美一区二区三区视频免费播放| 欧美a级一区二区| 激情综合色丁香一区二区| 成人中文字幕在线| 欧美日韩国产高清一区二区三区| 亚洲精品一区在线观看| 亚洲三级在线看| 久久99久久精品| 97se亚洲国产综合自在线观| 欧美一区二区女人| 国产精品久久久久影院老司 | 一区免费观看视频| 蜜桃免费网站一区二区三区| av激情亚洲男人天堂| 91精品国产乱| 1024国产精品| 精油按摩中文字幕久久| 色婷婷国产精品综合在线观看| 欧美一二三区在线| 亚洲免费在线观看| 国产精品中文字幕一区二区三区| 欧洲日韩一区二区三区| 国产蜜臀97一区二区三区 | 亚洲一区二区在线播放相泽| 国产尤物一区二区| 91精品国产免费久久综合| 国产91精品精华液一区二区三区| 欧美日韩久久久| 日韩一区在线免费观看| 国产美女在线精品| 69p69国产精品| 一区二区三区在线视频免费观看| 国产福利精品导航| 精品国产乱码久久久久久闺蜜| 亚洲亚洲人成综合网络| 91麻豆6部合集magnet| 国产精品乱人伦中文| 国产麻豆精品一区二区| 日韩欧美在线影院| 日本不卡一二三区黄网| 欧美日韩dvd在线观看| 亚洲激情六月丁香| 99热这里都是精品| 国产精品视频yy9299一区| 国产原创一区二区| 精品福利一区二区三区免费视频| 奇米影视在线99精品| 欧美日韩精品欧美日韩精品一| 亚洲精品中文在线观看| 91在线观看一区二区| 亚洲欧洲另类国产综合| 不卡的av在线| 136国产福利精品导航| 91在线丨porny丨国产| 综合激情网...| 色婷婷av一区二区三区大白胸| |精品福利一区二区三区| 不卡的av在线播放| 亚洲黄色免费网站| 欧美无乱码久久久免费午夜一区|