FZU--2188(BFS+多条件判断,这题超好)

来源:互联网 发布:霍华德生涯最好数据 编辑:程序博客网 时间:2024/05/17 01:34

Description

一天,小明需要把x只羊和y只狼运输到河对面。船可以容纳n只动物和小明。每次小明划船时,都必须至少有一只动物来陪他,不然他会感到厌倦,不安。不论是船上还是岸上,狼的数量如果超过羊,狼就会把羊吃掉。小明需要把所有动物送到对面,且没有羊被吃掉,最少需要多少次他才可以穿过这条河?

Input

有多组数据,每组第一行输入3个整数想x, y, n (0≤ x, y,n ≤ 200)

Output

如果可以把所有动物都送过河,且没有羊死亡,则输出一个整数:最少的次数。 否则输出 -1 .

Sample Input

3 3 233 33 3

Sample Output

11-1

Hint

第一个样例

次数 船 方向 左岸 右岸(狼 羊)

0: 0 0 3 3 0 0

1: 2 0 > 1 3 2 0

2: 1 0 < 2 3 1 0

3: 2 0 > 0 3 3 0

4: 1 0 < 1 3 2 0

5: 0 2 > 1 1 2 2

6: 1 1 < 2 2 1 1

7: 0 2 > 2 0 1 3

8: 1 0 < 3 0 0 3

9: 2 0 > 1 0 2 3

10: 1 0 < 2 0 1 3

11: 2 0 > 0 0 3 3


解体思路:这题除的这好,非常值得写.运用bfs将船运输过程中的模拟出来,再加上各种条件限制.并且将执行过的方案标记,以免重复执行.


代码如下:

#include<stdio.h>#include<string.h>#include<queue>using namespace std;int v[2][210][210];//v[0][][]表示左岸上羊和狼的状态,v[1][][]表示右岸上羊和狼的状态 int n,m,nm;struct stu{     int x;//羊的个数      int y;//狼的个数      int l;//次数      int w;//位置 };void bfs(){queue<stu>q;stu s,d;s.x=n;s.y=m;s.l=0;s.w=0;//printf("%d%d%d%d",s.x,s.y,s.w ,s.l );q.push(s);while(!q.empty()){s=q.front();q.pop();if(s.x==n&&s.y==m&&s.w==1){printf("%d\n",s.l);return;}d.l=s.l+1;//开始向对面方向运输动物 d.w=s.w==1?0:1;for(int i=0;i<=s.x;i++){for(int j=0;j<=s.y;j++){if(i+j==0)continue;//小明没有动物陪 if(i+j>nm)//超额 continue;if(i<j&&i!=0)//船上羊的数目小于狼的数目,且羊的个数不为零 continue;if(s.x-i<s.y-j&&s.x-i!=0)//动物被运输走后,岸上的羊数目小于狼,且羊的数目不为零 continue;    d.x=n-(s.x-i);// 动物运输过来后,岸上羊的数目     d.y=m-(s.y-j);// 动物运输过来后,岸上狼的数目     if(d.x<d.y&&d.x!=0)// 动物运输过来后,岸上的羊数目小于狼,且羊的数目不为零     continue;    if(v[d.w][d.x][d.y])//该方案执行过了     continue;    q.push(d);    v[d.w][d.x][d.y]=1;}}}printf("-1\n");}int main(){while(scanf("%d%d%d",&n,&m,&nm)!=EOF){memset(v,0,sizeof(v));v[0][n][m]=1;//将这种状态标记bfs(); }return 0;} 



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 海贼无双3路飞二档怎么开 从海贼开始的次元通讯录 混在海贼的日子 海贼之无限吞噬 海贼之无上主宰 海贼之地府我做主 大白师兄 海贼之通臂猿果实 海贼之疯狂变异 老兵不死 南禺 混在海贼世界的日子 海贼之剑道无双 大菠萝 海贼之冰皇 麻烦哥 海贼之赏金剑神 凋零与绯红 海贼之完美进化系统 用户名 海贼之不死之神 戒烟戒酒 海贼之幻影 落叶纷飞花满天 海贼之伊姆大人 十隐 肆虐综漫从海贼开始 海贼之天赋系统 夜南听风 海贼之不服就干 后候鸟 海贼之三宫六院七十二妃 二哥 海贼之神级提取系统第八区 海贼世界的剑豪大将免费 海贼之母巢秩序txt 大海贼系统 尚青天 海贼之恶魔果实 胸前有杀气 海贼之瞳术果实 海贼之掠夺一切第八区 网游海贼之神级登录 海贼之血旗纵横 逐天之痕 海贼之我要杀bigmom 海贼杀ol 海贼之厌之歌 海贼之果实猎人 笑酒歌 不思议迷宫海贼之港 海贼之港用啥组合打好 海贼之港平民哪个出战怎么打 不思议迷宫海贼之港速刷阵容 不思议迷宫海贼之港全dp攻略 不可思议迷宫海贼之港攻略 海贼时代 海贼无双3中文版手机版下载