最新求调
查看原帖
最新求调
1389641
_Kenba_楼主2024/12/24 22:27
#include<bits/stdc++.h>
using namespace std;
string f,c;
struct node {
	int t,biao;
	string ss;

};
int vis[1000000][7];
int found(string s) {
	int sum;
	sum=(s[0]-'0')*100000+(s[1]-'0')*10000+(s[2]-'0')*1000+(s[3]-'0')*100+(s[4]-'0')*10+(s[5]-'0');
	return sum;
}
queue<node> q;
void bfs(string s) {
	node f;
	memset(vis,0,sizeof(vis));
	f.ss=s,f.biao=0;
	f.t=0;
	q.push(f);
	vis[found(s)][0]=0;
	while(!q.empty()) {
		node h=q.front();
		cout<<h.biao<<endl;
		//cout<<h.ss<<" "<<h.biao<<" "<<h.t<<endl;
		q.pop();
		if(h.ss==c) {
			cout<<1;
			cout<<h.t;
			return;
		}
		for(int i=1; i<=6; i++) {
			//cout<<i;
			if(i==1) {
				if(h.biao==0) {
					continue;
				}
				swap(h.ss[h.biao],h.ss[0]);
				if(vis[found(h.ss)][h.biao]==0) {
					vis[found(h.ss)][h.biao]=1;
					node u;
					u.ss=h.ss,u.t=h.t+1,u.biao=h.biao;
					q.push(u);
				}

			} else if(i==2) {
				if(h.biao==5) {
					continue;
				}
				swap(h.ss[h.biao],h.ss[5]);
				if(vis[found(h.ss)][h.biao]==0) {
					vis[found(h.ss)][h.biao]=1;
					node u;
					u.ss=h.ss,u.t=h.t+1,u.biao=h.biao;
					q.push(u);
				}

			} else if(i==3) {
				//cout<<1;
				if(h.ss[h.biao]-'0'==9) {
					continue;
				}
				//cout<<1;
				int k=int(h.ss[h.biao]);
				k+=1;
				h.ss[h.biao]=char(k);
				//cout<<endl<<h.ss;
				if(vis[found(h.ss)][h.biao]==0) {
					vis[found(h.ss)][h.biao]=1;
					node u;
					u.ss=h.ss,u.t=h.t+1,u.biao=h.biao;
					q.push(u);
				}
				//cout<<1;

			} else if(i==4) {
				if(h.ss[h.biao]-'0'==0) {
					continue;
				}
				int k=int(h.ss[h.biao]);
				k-=1;
				h.ss[h.biao]=char(k);
				//cout<<h.ss[h.biao]<<endl;
				if(vis[found(h.ss)][h.biao]==0) {
					vis[found(h.ss)][h.biao]=1;
					node u;
					u.ss=h.ss,u.t=h.t+1,u.biao=h.biao;
					q.push(u);
				}

			} else if(i==5) {
				if(h.biao==0) {
					continue;
				}
				h.biao-=1;
				if(vis[found(h.ss)][h.biao]==0) {
					vis[found(h.ss)][h.biao]=1;
					node u;
					u.ss=h.ss,u.t=h.t+1,u.biao=h.biao;
					q.push(u);
				}

			} else if(i==6) {
				if(h.biao==5) {
					continue;
				}
			//	cout<<h.ss<<" "<<h.biao<<" "<<h.t<<endl;
				h.biao+=1;
				if(vis[found(h.ss)][h.biao]==0) {
					vis[found(h.ss)][h.biao]=1;
					cout<<h.ss<<" "<<h.biao<<" "<<h.t<<endl;
					node u;
					u.ss=h.ss,u.t=h.t+1,u.biao=h.biao;
					q.push(u);
				}
			}
		}
	}
}
int main() {
	cin>>f>>c;
	bfs(f);
	return 0;
}
2024/12/24 22:27
加载中...