Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by jafc ( 14 years ago )
#include<iostream>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
int dist[10000];
bool baneado[10000];
vector <int> vecino(int p){
vector <int> ans;
int tmp=p,rest=0,pot=1,d1,d2;
for(int i=0;i<4;i++){
d1=(p+1);
d2=(p+9);
p=p/10;
ans.push_back((p*10+d1)*pot+rest);
ans.push_back((p*10+d2)*pot+rest);
pot*=10;
rest=tmp%pot;
}
return ans;
}
void inic(){
for(int i=0;i<10000;i++){
dist[i]=-1;
baneado[i]=0;
}
}
void banear(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int a,b,c,d;
cin>>a>>b>>c>>d;
int p=a*1000+b*100+c*10+d;
baneado[p]=1;
}
}
int main(){
int testcase;
cin>>testcase;
while(testcase--){
int a1,a2,b1,b2,c1,c2,d1,d2;
cin>>a1>>b1>>c1>>d1;
cin>>a2>>b2>>c2>>d2;
int bgn=a1*1000+b1*100+c1*10+d1;
int end=a2*1000+b2*100+c2*10+d2;
inic();
banear();
queue <int> cola;
cola.push(bgn);
dist[bgn]=0;
int v=-1;
while(!cola.empty()and v!=end){
int t=cola.front();
cola.pop();
for(int i=0;i<vecino(t).size();i++){
if(dist[vecino(t)[i]]==-1 and !baneado[vecino(t)[i]]){
int v=vecino(t)[i];
dist[v]=dist[t]+1;
cola.push(v);
}
}
}
cout<<dist[end]<<endl;
}
return 0;
}
Revise this Paste
Children: 54828