菜鸡求助
查看原帖
菜鸡求助
370121
Zlylovecoding楼主2020/12/24 20:34

WA了两个点 (没有输出???)

wa了的一组数据:
555555 500995

求大神指点

代码(普通的bfs)

#include<bits/stdc++.h>
using namespace std;
int key,s,shi[7]={0,100000,10000,1000,100,10,1},tp,t1,t6;
struct u{
	int s,t,p;
};
queue<u> Q;
bool rec[1000000][7];
int main(){
	cin>>s>>key;
	Q.push((u){s,0,1});
	rec[s][1]=1;
	
	while(!Q.empty())
	{
		
		u ft=Q.front();	Q.pop();
		
		if(ft.s==key){
			cout<<ft.t;
			return 0;
		}
		
		tp=ft.s/shi[ft.p]%10;
		t1=ft.s/shi[1]%10;
		t6=ft.s/shi[6]%10;
		
		if(ft.p!=1&&tp!=t1){
			u nx=(u){ft.s-shi[ft.p]*tp-shi[1]*t1+shi[1]*tp+shi[ft.p]*t1,ft.t+1,ft.p};
			if(!rec[nx.s][nx.p]){
				Q.push(nx);
				rec[nx.s][nx.p]=1;
			}
				
		}
		if(ft.p!=6&&tp!=t6){
			u nx=(u){ft.s-shi[ft.p]*tp-shi[6]*t6+shi[6]*tp+shi[ft.p]*t6,ft.t+1,ft.p};
			if(!rec[nx.s][nx.p]){
				Q.push(nx);
				rec[nx.s][nx.p]=1;
			}
		}
		if(tp<9){
			u nx=(u){ft.s+shi[ft.p],ft.t+1,ft.p};
			if(!rec[nx.s][nx.p]){
				Q.push(nx);
				rec[nx.s][nx.p]=1;
			}
		}
		if(tp>1){
			u nx=(u){ft.s-shi[ft.p],ft.t+1,ft.p};
			if(!rec[nx.s][nx.p]){
				Q.push(nx);
				rec[nx.s][nx.p]=1;
			}
		}
		if(ft.p>1){
			u nx=(u){ft.s,ft.t+1,ft.p-1};
			if(!rec[nx.s][nx.p]){
				Q.push(nx);
				rec[nx.s][nx.p]=1;
			}
		}
		if(ft.p<6){
			u nx=(u){ft.s,ft.t+1,ft.p+1};
			if(!rec[nx.s][nx.p]){
				Q.push(nx);
				rec[nx.s][nx.p]=1;
			}
		}

	
	}
	u ft=Q.front();
	cout<<ft.p<<"  "<<ft.t<<endl;
	return 0; 
}

2020/12/24 20:34
加载中...