萌新求助!!!
查看原帖
萌新求助!!!
857015
crush_k楼主2023/4/5 13:24
#include<cstdio>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
map<int,int>ans;
int ed=123804765;
int M[4][4];
int fx[]={1,-1,0,0};
int fy[]={0,0,1,-1};
int main(){
	int st;scanf("%d",&st);
	queue<int>q;
	q.push(st);ans[st]=0;
	while(q.size()!=0){
		int pre=q.front();q.pop();
		int x_now,y_now;
		int x=pre;
		for(int i=3;i>=1;--i)
			for(int j=3;j>=1;--j){
				M[i][j]=x%10;
				if(M[i][j]==0){
					x_now=i;
					y_now=j;
				}
				x/=10;
			}
		for(int p=0;p<4;++p){
			int x_nxt=x_now+fx[p];
			int y_nxt=x_now+fy[p];
			if(x_nxt<1||x_nxt>3||y_nxt<1||y_nxt>3)continue;
			swap(M[x_now][y_now],M[x_nxt][y_nxt]);
			int now=0;
			for(int i=1;i<=3;++i)
				for(int j=1;j<=3;++j)
					now=now*10+M[i][j];
			swap(M[x_now][y_now],M[x_nxt][y_nxt]);
			if(ans.count(now)) continue; 
			ans[now]=ans[pre]+1;
			if(now==ed)break;
			q.push(now);
		}
	}
	printf("%d",ans[ed]);
	return 0;
}

为啥样例也挂掉了。求救!!!

2023/4/5 13:24
加载中...