亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++基于人工智能搜索策略解決農夫過河問題示例

2020-05-23 13:32:05
字體:
來源:轉載
供稿:網友

本文實例講述了C++基于人工智能搜索策略解決農夫過河問題。分享給大家供大家參考,具體如下:

問題描述

一農夫帶著一頭狼,一只羊和一個白菜過河,小船只能一次裝載農夫和一樣貨物,狼會吃羊,羊會吃白菜,只有農夫在時才安全?,F欲讓所有物品包括農夫都安全過道河對岸,求最佳答案。

狀態空間

用16*4的矩陣:a[16][4],存放每一步的狀態,第一列表示農夫的狀態,第二列表示菜的狀態,第三列表示羊的狀態,第四列表示狐貍的狀態,數組a里面的元素只為0或1,0代表在左岸,1代表在右岸。

初始狀態a[0][0]=a[0][1]=a[0][2]=a[0][3]=0,目標狀態是矩陣的某一行全為1。

操作規則

1. 農夫做往返運動,即第i步中,a[i][0] = i%2。
2. 每次農夫過河,可以選擇帶一件貨物,也可以選擇不帶。
3. 在農夫不在場的情況下,狼和羊不能在一起,羊和白菜不能在一起。

搜索策略

為了避免重復,我們將搜索過的狀態放到set中,之后避開搜索這個狀態即可。

我們使用深度優先搜索。搜索過程為:農夫做往返運動,當農夫從左岸到右岸時,優先選擇帶貨物過河,當農夫從右岸到左岸時,優先選擇不帶貨物過河。做出選擇之后,前進一步,看看是否達到目標狀態,如果沒有達到,則農夫繼續往返,知道搜索到目標狀態,或者找不到解為止。

C++代碼實現

#include <iostream>#include <cstring>#include <string>#include <set>using namespace std;void search(int i);int a[16][4];set<int> s;int b[16];string ss[2];string t[4];int k;int level;int count1(int a[])//將當前狀態轉化為10進制數 {  return a[0]*8+a[1]*4+a[2]*2+a[3];}void show(int a[])//顯示結果函數 {  cout<<"      左邊:";  for(int i=1;i<=3;i++)    if(a[i]==0)      cout<<t[i]<<" ";  cout<<"  ";  cout<<"右邊:";  for(int i=1;i<=3;i++)    if(a[i]==1)      cout<<t[i]<<" ";  cout<<endl<<endl; }void bringSomething(int i)//假設農夫會帶走某個東西 {  for(int j=1;j<=3;j++)  {    if(a[i][j]==a[i][0])//若j原來和農夫同一個位置,則農夫有可能將j帶走。     {      a[i+1][j]=a[i+1][0];//假設將j帶走       if((!(a[i+1][1]==a[i+1][2]&&a[i+1][1]!=a[i+1][0]||a[i+1][3]==a[i+1][2]&&a[i+1][2]!=a[i+1][0]))&&s.count(count1(a[i+1]))==0&&i>=level)//第i+1層將j帶走時滿足條件,則繼續搜索第i+1層       {        s.insert(count1(a[i+1]));        b[i]=1;        cout<<ss[a[i][0]]<<t[j]<<"  ";        show(a[i+1]);        level++;               search(i+1);      }      else //若不滿足條件則恢復       {        a[i+1][j]=a[i][j];      }          }  }}void bringNothing(int i)//假設農夫什么也不帶走 {  if((!(a[i+1][1]==a[i+1][2]&&a[i+1][1]!=a[i+1][0]||a[i+1][3]==a[i+1][2]&&a[i+1][2]!=a[i+1][0]))&&s.count(count1(a[i+1]))==0&&i>=level)  {      if(i==0)      cout<<"農夫從左邊去右邊,什么也不帶";    else       cout<<"農夫從右邊回左邊,什么也不帶";    show(a[i+1]);    s.insert(count1(a[i+1]));    search(i+1);    level++;  }  else     b[i]=0;}void search(int i)//從第i層開始搜索判斷第i+1層可能的情況 {   if(i>=16||count1(a[i])==15)    return;  for(int j=1;j<=3;j++)//用第i層來初始化第i+1層   {    a[i+1][j]=a[i][j];  }  b[i]=-1;  if(i%2==1)//在右岸,先考慮農夫什么也不帶走   {    bringNothing(i);    if(b[i]==0)      bringSomething(i);  }  else{//在左岸,先考慮農夫會帶走某一樣東西。     bringSomething(i);    if(b[i]!=1)      bringNothing(i);  }}int main(){    ss[0]="農夫從左邊去右邊,帶上";  ss[1]="農夫從右邊回左邊,帶上";  t[1]="菜";  t[2]="羊";  t[3]="狐貍";  memset(a,0,sizeof(a));  for(int i=0;i<16;i++)  {    a[i][0]=i%2;  }  s.clear();  k=0;  level=0;  s.insert(0);  //先將初始狀態儲存起來   search(0); //從第0層開始搜索   for(int i=0;i<16;i++)  {    for(int j=0;j<4;j++)      cout<<a[i][j]<<" ";    cout<<endl;    if(count1(a[i])==15)      break;  }  return 0;}

結果

農夫從右邊回左邊,什么也不帶 左邊:菜 狐貍 右邊:羊農夫從左邊去右邊,帶上菜 左邊:狐貍 右邊:菜 羊農夫從右邊回左邊,帶上羊 左邊:羊 狐貍 右邊:菜農夫從左邊去右邊,帶上狐貍 左邊:羊 右邊:菜 狐貍農夫從右邊回左邊,什么也不帶 左邊:羊 右邊:菜 狐貍農夫從左邊去右邊,帶上羊 左邊: 右邊:菜 羊 狐貍0 0 0 0 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1

希望本文所述對大家C++程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av视频导航| 欧美成人激情视频| 51久久精品夜色国产麻豆| 亚洲精品福利免费在线观看| 欧美日韩国产成人高清视频| 亚洲欧美激情一区| 亚洲自拍av在线| 欧美一级电影久久| 国产精品久久久久免费a∨| 亚洲a区在线视频| 奇米成人av国产一区二区三区| 日本成人在线视频网址| 粉嫩av一区二区三区免费野| 俺去了亚洲欧美日韩| 久久久久中文字幕2018| 51精品国产黑色丝袜高跟鞋| 在线播放国产精品| 国产一区二区三区高清在线观看| 色偷偷av一区二区三区| 国产精品视频最多的网站| 91精品国产网站| 亚洲国产一区自拍| 成人免费淫片aa视频免费| 韩曰欧美视频免费观看| 欧美亚洲第一区| 91久久久久久久久| 亚洲国产成人一区| 亚洲小视频在线| 日韩视频精品在线| 久久精品视频中文字幕| 欧美限制级电影在线观看| 色青青草原桃花久久综合| 欧美极品在线播放| 97国产一区二区精品久久呦| 国产在线观看精品| 日韩精品视频免费专区在线播放| 日韩成人高清在线| 国产一区二区三区在线视频| 国产一区二区三区网站| 国产欧美日韩精品丝袜高跟鞋| 亚洲网在线观看| 欧美精品久久久久久久免费观看| 国内精品一区二区三区| 欧美日韩国产va另类| 国产精品久久久精品| 久久久久日韩精品久久久男男| 日韩欧美在线一区| 久久99精品久久久久久琪琪| 久久国产精彩视频| 欧美精品做受xxx性少妇| 久久久久久久久久久91| 久久久精品一区二区| 国内外成人免费激情在线视频网站| 日韩美女毛茸茸| 成人黄色中文字幕| 91禁国产网站| 亚洲一区二区久久久久久久| 日韩精品一区二区视频| 国产女精品视频网站免费| 亚洲欧美在线一区二区| 久久久久久久91| 欧美精品在线免费| 欧美午夜宅男影院在线观看| 一区二区三区视频免费在线观看| 欧美性极品xxxx做受| 日韩精品中文字幕在线| 福利精品视频在线| 国产欧美一区二区三区久久人妖| 日韩h在线观看| 亚洲一品av免费观看| 中文字幕亚洲欧美日韩2019| 在线视频日韩精品| 国产日韩精品视频| 欧美成人一二三| 久久九九全国免费精品观看| 色悠久久久久综合先锋影音下载| 亚洲国产精彩中文乱码av| 欧美在线性视频| 国产精品久久久久久久久久| 欧美怡春院一区二区三区| 欧美国产高跟鞋裸体秀xxxhd| 日韩免费中文字幕| 国产免费一区二区三区在线能观看| 青青草国产精品一区二区| 久久精品久久久久| 亚洲天堂男人天堂| 国产精品中文字幕在线| 成人激情电影一区二区| 欧美精品久久久久久久免费观看| 欧美激情二区三区| 久久久精品欧美| 久久久999精品免费| 欧亚精品在线观看| 久久久99久久精品女同性| 欧美性猛交xxxx偷拍洗澡| 97在线免费观看视频| 亚洲国产中文字幕在线观看| 亚洲精品国精品久久99热一| 色婷婷**av毛片一区| 国产亚洲美女精品久久久| 欧美伦理91i| 欧美激情视频给我| 亚洲欧美色婷婷| 成人性生交xxxxx网站| 国内精品久久久久久久久| 亚洲成人久久久久| 亚洲视频在线观看| 国产精品视频网址| 久久久视频精品| 久久精品一偷一偷国产| 日韩女优人人人人射在线视频| 国产精品久久久久国产a级| 国产精品久久久久久久久借妻| 久久久中文字幕| 国产精品白嫩初高中害羞小美女| 国产一区二区三区在线免费观看| 精品中文字幕在线观看| 亚洲精品一区二区三区不| 久久久久久久久亚洲| 91av中文字幕| 韩剧1988在线观看免费完整版| 日韩成人在线视频| 日韩av最新在线| 国产成人短视频| 亚洲欧美国产一区二区三区| 亚州成人av在线| 精品高清美女精品国产区| 国产精品日韩在线观看| 国产在线98福利播放视频| 亚洲国产成人爱av在线播放| 国产91精品久久久久久久| 久久中文久久字幕| 成人av在线亚洲| 国产精品成人国产乱一区| 91九色单男在线观看| 91在线播放国产| 亚洲网在线观看| 欧美激情精品久久久久久变态| 亚洲最大福利视频网站| 九色精品免费永久在线| 亚洲精品mp4| 亚洲最新av在线| 蜜月aⅴ免费一区二区三区| 92看片淫黄大片欧美看国产片| 欧美午夜性色大片在线观看| 色综合色综合久久综合频道88| 成年无码av片在线| 亚洲国产欧美一区二区丝袜黑人| 久久的精品视频| 日韩欧美中文字幕在线观看| 日韩电视剧免费观看网站| 91最新在线免费观看| 日韩精品久久久久久久玫瑰园| 日本亚洲欧洲色α| 欧美日韩在线观看视频小说| 欧美丝袜美女中出在线| 中文字幕亚洲激情| 国产免费一区二区三区在线观看| 亚洲成人中文字幕| 中文一区二区视频| 欧美性猛交xxxx黑人猛交| 亚洲美女av在线播放| 2020久久国产精品| 国产一区二区精品丝袜|