Welcome, guest! Login / Register - Why register?
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
Your Name: Code Language: