社区讨论

求助,为甚不能用c++库里的队列

学术版参与者 5已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo8uyjnb
此快照首次捕获于
2023/10/28 00:59
2 年前
此快照最后确认于
2023/10/28 00:59
2 年前
查看原帖
倒油问题
就编译没问题,但到取队列中结构体中元素值时显示异常
CPP
#include<iostream>
#include<queue>
using namespace std;
const int A=10,B=7,C=3,M=5;
bool f[A][B][C]={0};

struct ttt{
	int a,b,c,step;
};

queue<ttt> w;
void dp(int a,int b,int c,int step)
{
	ttt x;
	if(a==M && b==M){
		cout<<step;
		return;
	}
	if(a!=0){
		if(b!=B){
			x.b=a+b;
			if(x.b>B){
				x.b=B;
				x.a=a+b-B;
			}
			x.c=c;
			if(!f[x.a][x.b][x.c]){
				x.step=step+1;
				w.push(x);
				f[x.a][x.b][x.c]=1;
			}	
		}
		if(c!=C){
			x.c=a+c;
			if(x.c>C){
				x.c=C;
				x.a=a+b-C;
			}
			x.b=b;
			if(!f[x.a][x.b][x.c]){
				x.step=step+1;
				w.push(x);
				f[x.a][x.b][x.c]=1;
			}
			
		}
	}
	if(b!=0){
		if(a!=A){
			x.a=a+b;
			if(x.a>A){
				x.a=A;
				x.b=a+b-A;
			}
			x.c=c;
			if(!f[x.a][x.b][x.c]){
				x.step=step+1;
				w.push(x);
				f[x.a][x.b][x.c]=1;
			}
			
		}
		if(c!=C){
			x.c=b+c;
			if(x.c>C){
				x.c=C;
				x.b=a+b-C;
			}
			x.a=a;
			if(!f[x.a][x.b][x.c]){
				x.step=step+1;
				w.push(x);
				f[x.a][x.b][x.c]=1;
			}
		}
		
	}
	if(c!=0){
		if(a!=A){
			x.a=a+c;
			if(x.a>A){
				x.a=A;
				x.c=a+c-A;
			}
			x.b=b;
			if(!f[x.a][x.b][x.c]){
				x.step=step+1;
				w.push(x);
				f[x.a][x.b][x.c]=1;
			}
			
		}
		if(b!=B){
			x.b=c+b;
			if(x.b>B){
				x.b=B;
				x.c=c+b-B;
			}
			x.a=a;
			if(!f[x.a][x.b][x.c]){
				x.step=step+1;
				w.push(x);
				f[x.a][x.b][x.c]=1;
			}
		}
		
	}
	x=w.front();
	w.pop();
	dp(x.a,x.b,x.c,x.step);
}

int main()
{
	dp(10,0,0,0);
	
	
	return 0;
 } 

回复

4 条回复,欢迎继续交流。

正在加载回复...