求助!!
查看原帖
求助!!
1389468
ZHAOJJzjj123楼主2024/10/3 20:51

哪个大佬帮帮本蒟蒻看看爆0的代码~~ 我为啥输入不了?

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
string a;
struct spt{
	string str;
	int ans,r[400000];
};
queue<spt>q;
int find(string x){
	int ans;
	for(int i=0;i<9;i++){
		for(int j=i+1;j<=9;j++){
			if(x[i]>x[j]){
				ans++;
			}
		}
	}
	return ans+1;
}
string Y_z(string a){
	string b="         ";
	b[1-1]=a[4-1];
	b[2-1]=a[1-1];
	b[3-1]=a[2-1];
	b[4-1]=a[7-1];
	b[5-1]=a[5-1];
	b[6-1]=a[3-1];
	b[7-1]=a[8-1];
	b[8-1]=a[9-1];
	b[9-1]=a[6-1];
	return b;
}
string N_z(string a){
	string b="         ";
	b[1-1]=a[2-1];
	b[2-1]=a[3-1];
	b[3-1]=a[6-1];
	b[4-1]=a[1-1];
	b[5-1]=a[5-1];
	b[6-1]=a[9-1];
	b[7-1]=a[4-1];
	b[8-1]=a[7-1];
	b[9-1]=a[8-1];
	return b;
}
int main(){
	cin>>a;
	spt news;
	news.str=a;
	q.push(news);
	q.front().r[find(a)]=1;
	while(!q.empty()){
		spt nw=q.front();
		q.pop();
		if(nw.str=="123405678"){
			cout<<nw.ans;
			return 0;
		}
		if(!nw.r[find(nw.str.substr(3,6)+nw.str.substr(0,3))]){
			nw.r[find(nw.str.substr(3,6)+nw.str.substr(0,3))]=1;
			news=nw;
			news.str=nw.str.substr(3,6)+nw.str.substr(0,3);
			news.ans++;
			q.push(news);
			nw.r[find(nw.str.substr(3,6)+nw.str.substr(0,3))]=0;
		}
		if(!nw.r[find(Y_z(nw.str))]){
			nw.r[find(Y_z(nw.str))]=1;
			news=nw;
			news.str=Y_z(nw.str);
			news.ans++;
			q.push(news);
			nw.r[find(Y_z(nw.str))]=0;
		}
		if(!nw.r[find(N_z(nw.str))]){
			nw.r[find(N_z(nw.str))]=1;
			spt news=nw;
			news.str=N_z(nw.str);
			news.ans++;
			q.push(news);
			nw.r[find(N_z(nw.str))]=0;
		}
	}
	cout<<"No answer";
	return 0;
}

多指教。

2024/10/3 20:51
加载中...