3 solutions

  • 3
    @ 2024-3-15 13:38:09

    打表simida

    代码(打表版)

    #include <bits/stdc++.h>
    using namespace std;
    int main(int argc, char **argv){
    	printf("\
    10 0 0\n\
    3 7 0\n\
    3 4 3\n\
    6 4 0\n\
    6 1 3\n\
    9 1 0\n\
    9 0 1\n\
    2 7 1\n\
    2 5 3\n\
    5 5 0");
    	return 0;
    }
    
  • 2
    @ 2024-3-15 20:53:17

    广搜写法

    没有技术只有复制与粘贴

    #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
    @ 2025-3-24 13:32:04
    #include<bits/stdc++.h>
    int main(){
    	std::cout<<"10 0 0\n3 7 0\n3 4 3\n6 4 0\n6 1 3\n9 1 0\n9 0 1\n2 7 1\n2 5 3\n5 5 0";
    	return 0;
    }
    
    • 1

    Information

    ID
    1020
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    7
    Tags
    (None)
    # Submissions
    59
    Accepted
    15
    Uploaded By