EOJ 1646/POJ 3126 Prime Path
把一个四位质数变为另一个四位质数,要求每次只能改动一位数,且变化过程中产生的数也是四位质数。
先筛出质数,然后普通bfs。
#include<bits/stdc++.h>
using namespace std;
int prime[10000];
string s, t;
bool vis[10000];
void init()
{
for (int i = 2; i < 10000; ++i)
prime[i] = 1;
for (int i = 2; i < 10000; ++i)
if (prime[i])
for (int j = i*i; j < 10000; j += i)
prime[j] = 0;
}
int toint(string str)
{
int num = 0;
for (int i = 0; i < 4; ++i)
num = num * 10 + str[i] - '0';
return num;
}
int bfs()
{
memset(vis, 0, sizeof(vis));
queue<pair<string, int> > q;
q.push(make_pair(s, 0));
while (!q.empty()) {
string a = q.front().first;
int cnt = q.front().second;
q.pop();
if (a == t) return cnt;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j <= 9; ++j) {
if (!i && !j) continue;
string b = a;
b[i] = j + '0';
int num = toint(b);
if (!vis[num] &