c语言农夫过河游戏代码解释,农夫过河C++代码
農夫過河C++代碼
///農夫過河C++代碼
///???作者:lyb661??時間:2015年8月
/*
農夫過河問題思路:主要使用用容器,一個存儲此岸,一個存儲彼岸,一個存儲結果(用于打印).
過河全部過程都是隨機的,都由容器來選擇。所以打印結果每次可能不一樣,比如:
羊過-狼過-羊回-菜過-羊過 或:羊過-菜過-羊回-狼過-羊過.
這個程序是2015年做的,當時不知道發的什么瘋,做出來的?,F在看起來有的笨拙,有時間再簡化一下。
*/
#include
#include
#include
#include
#include
#include
using namespace std;
void out(int a){cout<
int main(){
srand(time(0));
int ar[]={1,2,3};///1=wolf狼,2=sheep羊,3=vegetable菜
listlista(ar,ar+3); ///this bank 此岸
vectorvec;///hold result??保存過河結果 用于打印渡河過程例如1代表羊過河-1代表羊回來
listlistb; ///another bank??彼岸
///step 1:over sheep
while(lista.size()>2){
listlistat(lista); ///listat=lista ///listat用來保存lista的數據
int n=rand()%lista.size();///will 0/1/2
int m=n;
lista.remove(n+1);///remove 1/2/3
if(((find(lista.begin(),lista.end(),1)!=lista.end())&&
(find(lista.begin(),lista.end(),2)!=lista.end()))
||((find(lista.begin(),lista.end(),2)!=lista.end())&&
(find(lista.begin(),lista.end(),3)!=lista.end())))
{
lista.swap(listat);continue;///要是剩下狼羊或羊菜就重做
}
else{listb.push_back(m+1);vec.push_back(m+1);}
}
///step 2:over wolf or vegetable
{
int n=rand()%lista.size();/// will be 0 or 1??用做容器下標
n = n==1?2:0;???????????? /// will be 0 or 2??代表容器元素
lista.remove(n+1);
int m=n;
listb.push_back(m+1);
vec.push_back(m+1);
/*
or like this
vectorvca(lista.begin(),lista.end());
int n=rand()%vca.size();
int m=vca[n];
lista.remove(m);
listb.push_front(m);
vec.push_back(m);
*/
}
listb.sort();
///step 3 is sheep back
while(listb.size()>1){
listlistat(lista);
listlistbt(listb);
vectorvcb(listb.begin(),listb.end());
int n=rand()%vcb.size(); ///0 or 1
int m=vcb[n];///1,2 or 2,3
listb.remove(m);
lista.push_front(m);
if(find(listb.begin(),listb.end(),2)!=listb.end())
{
lista.swap(listat);
listb.swap(listbt);continue;
}
else
{
vec.push_back(-m);
}
}
lista.sort();
///step 4:over vegetale or wolf over river
///step 4 is success
while(lista.size()>1){
listlistat(lista);
listlistbt(listb);
vectorvca(lista.begin(),lista.end()); ///向量vca臨時保存lista方便下標操作
int n=rand()%vca.size();///will be 0 or 1
int m=vca[n];??///1,2 or 2,3
lista.remove(m);///remove 1 or 3
listb.push_front(m);
if(((find(listb.begin(),listb.end(),1)!=listb.end())&&
(find(listb.begin(),listb.end(),2)!=listb.end()))
||((find(listb.begin(),listb.end(),2)!=listb.end())&&
(find(listb.begin(),listb.end(),3)!=listb.end())))
{?????????????????????///彼岸也一樣同時發現羊狼或者羊有菜就重做
lista.swap(listat);
listb.swap(listbt);continue;
}
else
{
vec.push_back(m);
}
}
///step 5:is success!
{
int n=rand()%lista.size();
vectorvca(lista.begin(),lista.end());
int m=vca[n];
lista.remove(m);
listb.push_front(m);
vec.push_back(m);
}
listb.sort();
///out put the result:
cout<
for_each(lista.begin(),lista.end(),out);
///對順序容器執行某項操作,如果不成功則不會改變原狀態
cout<
for_each(listb.begin(),listb.end(),out);
cout<
for(int i=0;i!=vec.size();i++)
{
switch(vec[i])
{
case 1:cout<
case -1:cout<
case 2:cout<
case -2:cout<
case 3:cout<
case -3:cout<
default:cout<
}
}
cin.get();
return 0;
}
[此貼子已經被作者于2019-1-16 19:32編輯過]
總結
以上是生活随笔為你收集整理的c语言农夫过河游戏代码解释,农夫过河C++代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言药房系统书写指导书,C语言药房管理
- 下一篇: android服务的启动过程,Andro