过了样例,只有5分,求调
查看原帖
过了样例,只有5分,求调
558542
Zmoking楼主2022/3/26 18:55
#include<bits/stdc++.h>



using namespace std;



int t,va,vb,n,v[1005][1005],f[1005][1005];


struct zt{

	int a,b;

	int step;

}z[1000000];

void bfs(){

	int head=0,tail=1,xxx=0;;

	z[1].a=z[1].b=z[1].step=0;

	while(head<tail){

		head++;

		int aa=z[head].a,bb=z[head].b,ss=z[head].step;

			if(bb==n){

			cout<<ss<<" ";

			for(int i=1;i<=ss;i++){

				cout<<f[head][i]<<' ';

			} 
			
			cout<<endl;

			break;
		}


		for(int i=1;i<=6;i++){
			if(i==1&&z[head].a<va&&!v[va][bb]){
				v[va][bb]=1;
				z[++tail].a=va;
				z[tail].b=bb;
				z[tail].step=ss+1;
				for(int j=1;j<=ss;j++){
					f[tail][j]=f[head][j];
				}
				f[tail][ss+1]=i;
			}
			if(i==2&&z[head].b<vb&&!v[aa][vb]){
				v[aa][vb]=1;
				z[++tail].a=aa;
				z[tail].b=vb;
				z[tail].step=ss+1;
				for(int j=1;j<=ss;j++){
					f[tail][j]=f[head][j];
				}
				f[tail][ss+1]=i;
			}
			if(i==3&&aa>0&&!v[0][bb]){
				v[0][bb]=1;
				z[++tail].a=0;
				z[tail].b=bb;
				z[tail].step=ss+1;
				for(int j=1;j<=ss;j++){
					f[tail][j]=f[head][j];
				}
				f[tail][ss+1]=i;
			}

			if(i==4&&bb>0&&!v[aa][0]){

				v[aa][0]=1;

				z[++tail].a=aa;

				z[tail].b=0;

				z[tail].step=ss+1;
				for(int j=1;j<=ss;j++){
					f[tail][j]=f[head][j];
				}
				f[tail][ss+1]=i;
			}

			if(i==5&&aa<va&&bb>0){

				int x=va-aa;

				if(x>=bb&&!v[aa+bb][0]){

					v[aa+bb][0]=1;

					z[++tail].a=aa+bb;

					z[tail].b=0;

					z[tail].step=ss+1;
					for(int j=1;j<=ss;j++){
						f[tail][j]=f[head][j];
						}
						f[tail][ss+1]=i;
				}

				if(x<bb&&!v[va][bb-x]){

					v[va][bb-x]=1;

					z[++tail].a=va;

					z[tail].b=bb-x;

					z[tail].step=ss+1;
					for(int j=1;j<=ss;j++){
					f[tail][j]=f[head][j];
				}
				f[tail][ss+1]=i;
				} 

		} 

			if(i==6&&bb<vb&&aa>0){

				int x=vb-bb;

				if(x>=aa&&!v[0][aa+bb]){

					v[0][aa+bb]=1;

					z[++tail].a=0;

					z[tail].b=aa+bb;

					z[tail].step=ss+1;
						for(int j=1;j<=ss;j++){
					f[tail][j]=f[head][j];
				}
				f[tail][ss+1]=i;
				}

				if(x<aa&&!v[aa-x][vb]){

					v[aa-x][vb]=1;

					z[++tail].a=aa-x;

					z[tail].b=vb;

					z[tail].step=ss+1;
						for(int j=1;j<=ss;j++){
					f[tail][j]=f[head][j];
				}
					f[tail][ss+1]=i;
				} 

		}

	} 

}

} 

int main(){



	cin>>t;

	for(int mmmmm=1;mmmmm<=t;mmmmm++){
		memset(v,0,sizeof(v));
		memset(f,0,sizeof(f));
		cin>>va>>vb>>n;

		bfs(); 

	}



} 
2022/3/26 18:55
加载中...