蒟蒻求助,莫名运行错误
  • 板块灌水区
  • 楼主珈乐唯毒
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/5/7 19:46
  • 上次更新2023/11/7 02:56:55
查看原帖
蒟蒻求助,莫名运行错误
181521
珈乐唯毒楼主2020/5/7 19:46

主函数里的push不知道为什么就是用不起,有没有大佬救一救我啊QAQ

#include<bits/stdc++.h>
using namespace std;
int jc[]={1,1,2,6,24,120,720,5040,40320,362880};
int ten[]={1,1,10,100,1000,10000,100000,1000000,10000000,100000000};
int da[]={0,1,2,3,4,5,6,7,8};
bool viss[5000000],vis[10];
int en=411854,st,tt,sx,sy,tx,ty,d[5000000];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int ma[4][4];
int zdx(int o){
	for(int i=0;i<=8;i++)da[i]=i;
	int sum=0,q,w=9;
	while(w>0){
		q=o/ten[w];	
		sum+=da[q]*jc[w];
		o%=ten[w];
		for(int i=q+1;i<=8;i++)da[i]--;
		w--;
	}
	return sum;
}
int shu(int o){
	int sum=0,q,w=9;
	for(int i=0;i<=8;i++){
		da[i]=i;
		vis[i]=0;
	}
	while(w>0){
		q=o/jc[w];
		for(int i=0;i<=8;i++){
			if(da[i]==q&&vis[i]==0){
				q=i;
				vis[q]=1;
				break;
			}
		}
		sum+=q*ten[w];
		o%=jc[w];
		for(int i=q+1;i<=8;i++)da[i]--;
		w--;
	}
	return sum;
}
void cha(int o){
	int w=9,i=1,j=1;
	while(w>0){
		ma[i][j]=o/ten[w];
		o%=ten[w];
		w--;
		j++;
		if(j==4){
			i++;
			j=1;
		}
	}
	return;
}
int chaa(){
	int sum=0,w=9,i=1,j=1;
	while(w>0){
		sum+=ma[i][j]*ten[w];
		w--;
		j++;
		if(j==4){
			i++;
			j=1;
		}
	}
	return sum;
}
queue<int> p;
int main(){
	cin>>st;
	vis[zdx(st)]=1;
	d[zdx(st)]=0;
	p.push(st);
	while(!p.empty()){
		st=shu(p.front());
		p.pop();
		cha(st);
		for(int i=1;i<=3;i++){
			for(int j=1;j<=3;j++){
				if(ma[i][j]==0){
					sx=i;
					sy=j;
				}
			}
		}
		for(int i=0;i<4;i++){
			tx=sx+dx[i];
			ty=sy+dy[i];
			if(!(tx>=1&&tx<=3&&ty>=1&&ty<=3))continue;
			swap(ma[tx][ty],ma[sx][sy]);
			tt=chaa();
			if(vis[zdx(tt)]==0){
				p.push(tt);
				d[zdx(tt)]=d[zdx(st)]+1;
				vis[zdx(tt)]=1;
				cha(st);
			}
		}
	}
	cout<<d[en];
	return 0;
} 
2020/5/7 19:46
加载中...