poj3126

bfs。

#include
#include
#include
#include
#include
using namespace std;
int c;
int a, b;
bool flag[100005];
struct Node
{
    int a, s;

    Node(){}

    Node(int a, int s)
    {
        this->a = a;
        this->s = s;
    }
};
bool vis[100005];

int bfs()
{
    queue<Node> q;
    q.push(Node(a, 0));
    vis[a] = true;
    Node u;
    int digit[4];
    int tmp;
    while(q.size())
    {
        u = q.front();
        q.pop();
        if(u.a == b)
            return u.s;
        digit[3] = u.a % 10;
        digit[2] = u.a % 100 / 10;
        digit[1] = u.a % 1000 / 100;
        digit[0] = u.a / 1000;
        for(int i = 0; i < 4; i ++)
            for(int j = 0; j <= 9; j ++)
            {
                if(!i && !j)
                    continue;    
                tmp = u.a - digit[i] * int(pow(10.0, 3 - i)) + j * (pow(10.0, 3 - i));
                if(vis[tmp] || !flag[tmp])
                    continue;
                q.push(Node(tmp, u.s + 1));
                vis[tmp] = true;
            }
    }
}

int main()
{
    fill(flag, flag + 100005, true);
    for(int i = 2; i < 100005; i ++)
        if(flag[i])
            for(int j = 2; j * i < 100005; j ++)
                flag[j * i] = false;
    cin >> c;
    while(c --)
    {
        memset(vis, false, sizeof(vis));
        cin >> a >> b;
        cout << bfs() << endl;
    }
    // system("pause");
    return 0;
}

你可能感兴趣的:(poj3126)