nyoj+三个水杯bfs错了很多小心点+单步调试找错误很好
来源:互联网 发布:linux如何自建pdnsd 编辑:程序博客网 时间:2024/04/29 23:58
点击打开链接
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>#include<cstring>#include<iostream>#include<algorithm>#include<math.h>#include<queue>using namespace std;struct Node{ int v1,v2,v3,steps;};queue<Node>Q;int V1=0,V2=0,V3=0,E1=0,E2=0,E3=0,visit[105][105][105];int check(Node temp){ if(temp.v1==E1&&temp.v2==E2&&temp.v3==E3) return 1; return 0;}void BFS(){ while(!Q.empty()) Q.pop(); memset(visit,0,sizeof(visit)); Node n,temp,temp1; n.v1=V1,n.v2=0,n.v3=0,n.steps=0;///变量赋值出错,炸了几个小时 visit[n.v1][n.v2][n.v3]=1; Q.push(n); while(!Q.empty()){ temp1=Q.front(); Q.pop(); if(check(temp1)) { printf("%d\n",temp1.steps); return; } temp=temp1;///这里一定要变量赋值,因为从队列里出来的temp1.分别进行6次变化。 if(temp.v2!=V2&&temp.v1){///pour V1->V2,temp.v1有水且temp.v2未满 if(temp.v1<=V2-temp.v2){///V1 water is not enough temp.v2+=temp.v1; temp.v1=0; } else{ temp.v1-=(V2-temp.v2); temp.v2=V2; } if(!visit[temp.v1][temp.v2][temp.v3]){ temp.steps+=1; Q.push(temp); visit[temp.v1][temp.v2][temp.v3]=1;///最少步数嘛,一定要标记防重复 } } temp=temp1; if(temp.v3!=V3&&temp.v1){///pour V1->V3 if(temp.v1<=V3-temp.v3){///V1 water is not enough temp.v3+=temp.v1; temp.v1=0; } else{ temp.v1-=(V3-temp.v3); temp.v3=V3; } if(!visit[temp.v1][temp.v2][temp.v3]){ temp.steps+=1; Q.push(temp); visit[temp.v1][temp.v2][temp.v3]=1; } } temp=temp1; if(temp.v1!=V1&&temp.v2){///pour V2->V1 if(temp.v2<=V1-temp.v1){///V2 water is not enough temp.v1+=temp.v2; temp.v2=0; } else{ temp.v2-=(V1-temp.v1); temp.v1=V1; } if(!visit[temp.v1][temp.v2][temp.v3]){ temp.steps+=1; Q.push(temp); visit[temp.v1][temp.v2][temp.v3]=1; } } temp=temp1; if(temp.v3!=V3&&temp.v2){///pour V2->V3 if(temp.v2<=V3-temp.v3){///V2 water is not enough temp.v3+=temp.v2; temp.v2=0; } else{ temp.v2-=(V3-temp.v3); temp.v3=V3; } if(!visit[temp.v1][temp.v2][temp.v3]){ temp.steps+=1; Q.push(temp); visit[temp.v1][temp.v2][temp.v3]=1; } } temp=temp1; if(temp.v1!=V1&&temp.v3){///pour V3->V1 if(temp.v3<=V1-temp.v1){///V1 water is not enough temp.v1+=temp.v3; temp.v3=0; } else{ temp.v3-=(V1-temp.v1); temp.v1=V1; } if(!visit[temp.v1][temp.v2][temp.v3]){ temp.steps+=1; Q.push(temp); visit[temp.v1][temp.v2][temp.v3]=1; } } temp=temp1; if(temp.v2!=V2&&temp.v3){///pour V3->V2 if(temp.v3<=V2-temp.v2){///V1 water is not enough temp.v2+=temp.v3; temp.v3=0; } else{ temp.v3-=(V2-temp.v2); temp.v2=V2; } if(!visit[temp.v1][temp.v2][temp.v3]){ temp.steps+=1; Q.push(temp); visit[temp.v1][temp.v2][temp.v3]=1; } } } printf("-1\n");}int main(){ int N=0; scanf("%d",&N); while(N--){ scanf("%d%d%d%d%d%d",&V1,&V2,&V3,&E1,&E2,&E3); BFS(); } return 0;}
0 0
- nyoj+三个水杯bfs错了很多小心点+单步调试找错误很好
- 三个水杯 NYOJ BFS
- NYOJ三个水杯【BFS】
- nyoj 三个水杯 (BFS )
- NYOJ 21 三个水杯(bfs)
- NYOJ-21-三个水杯【BFS】
- NYOJ 21--三个水杯【BFS】
- NYOJ 21 三个水杯 (BFS)
- nyoj 21 三个水杯 bfs
- NYOJ 21三个水杯 BFS
- NYOJ--21--bfs--三个水杯
- nyoj 21-三个水杯(bfs)
- BFS——NYOJ 21 三个水杯
- BFS——NYOJ 21 三个水杯
- BFS——NYOJ 21 三个水杯
- NYOJ 21 三个水杯 【暴力+BFS】
- nyoj 21 三个水杯 【BFS + 优先队列】
- nyoj 21--三个水杯(隐式图bfs)
- JS 之 验证日期格式
- 类加载器
- [软件渲染器入门]五-平面着色和高氏着色
- XListView
- WebView使用
- nyoj+三个水杯bfs错了很多小心点+单步调试找错误很好
- PULL解析
- VBA实现贪食蛇游戏
- unity3d中用wsad控制行进方向
- 旧瓶装新酒的单例模式
- [linux]vim的使用方法
- PAT练习基础编程题目之简单输出整数
- 1030. Travel Plan (30) dijkstra算法
- 未名湖边的烦恼