3 solutions
-
2
广搜写法
没有技术只有复制与粘贴
#include<iostream> #include<vector> #include<queue> #include<stack> using namespace std; struct node{ int a; int b; int c; int fu; }; int nnt=0; //用于计数,标记每个节点父亲的下标 node dp[1000] = {}; //用于储存每个父亲节点状态的数组,和动规无关 bool flag[10][7][3]; queue<node> q; stack<node> qq; int main() { q.push({10,0,0,-1}); while(!q.empty()){ flag[q.front().a][q.front().b][q.front().c]=1; dp[nnt]=q.front(); if (q.front().a==5 && q.front().b==5){ //条件成立则输出路径 node i=q.front(); while(i.fu!=-1){ qq.push(i); //利用栈反序输出 i=dp[i.fu]; } qq.push(i); while(!qq.empty()) { cout << qq.top().a << " " << qq.top().b << " " << qq.top().c << endl; qq.pop(); } return 0; //结束程序 } if (q.front().a){ if (q.front().a>=7-q.front().b){ //当油瓶里有油时执行判断 if(!flag[q.front().a-(7-q.front().b)][7][q.front().c]){ //如果当前油瓶油量比把目标油瓶装满的油量多,那么将目标油瓶倒满 q.push({q.front().a-(7-q.front().b),7,q.front().c,nnt}); } }else{ if (!flag[0][q.front().b+q.front().a][q.front().c]){ //如果当前油瓶油量比把目标油瓶装满的油量少,那么将当前油瓶内所有油倒入目标油瓶 ,下同 q.push({0,q.front().b+q.front().a,q.front().c,nnt}); } } if (q.front().a>=3-q.front().c){ if (!flag[q.front().a-(3-q.front().c)][q.front().b][3]){ q.push({q.front().a-(3-q.front().c),q.front().b,3,nnt}); } }else{ if (!flag[0][q.front().b][q.front().c+q.front().a]){ q.push({0,q.front().b,q.front().c+q.front().a,nnt}); } } } if (q.front().b){ if (q.front().b>=10-q.front().a){ if (!flag[10][q.front().b-(10-q.front().a)][q.front().c]){ q.push({10,q.front().b-(10-q.front().a),q.front().c,nnt}); } }else{ if (!flag[q.front().b+q.front().a][0][q.front().c]){ q.push({q.front().b+q.front().a,0,q.front().c,nnt}); } } if (q.front().b>=3-q.front().c){ if (!flag[q.front().a][q.front().b-(3-q.front().c)][3]){ q.push({q.front().a,q.front().b-(3-q.front().c),3,nnt}); } }else{ if (!flag[q.front().a][0][q.front().c+q.front().b]){ q.push({q.front().a,0,q.front().c+q.front().b,nnt}); } } } if (q.front().c){ if (q.front().c>=7-q.front().b){ if (!flag[q.front().a][7][q.front().c-(7-q.front().b)]){ q.push({q.front().a,7,q.front().c-(7-q.front().b),nnt}); } }else{ if (!flag[q.front().a][q.front().b+q.front().c][0]){ q.push({q.front().a,q.front().b+q.front().c,0,nnt}); } } if (q.front().c>=10-q.front().a){ if (!flag[10][q.front().b][q.front().c-(10-q.front().a)]){ q.push({10,q.front().b,q.front().c-(10-q.front().a),nnt}); } }else{ if (!flag[q.front().a+q.front().c][q.front().b][0]){ q.push({q.front().a+q.front().c,q.front().b,0,nnt}); } } } nnt++; //存储下个父亲节点 q.pop(); } }
- 1
Information
- ID
- 1020
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 59
- Accepted
- 15
- Uploaded By