您的位置:首页 > 其它

poj3126 搜索

2016-04-22 19:41 176 查看
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <queue>
#define MAXN 10000
using namespace std;

int first,last;
int prime[MAXN];
void dabiao()
{
int i,j;
for(i = 1000;i<MAXN;i++)
{
int flag = 0;
for(j = 2;j<=pow(i,0.5);j++)
{
if(i%j==0)
{
flag = 1;
break;
}
}
if(!flag)
prime[i] = 1;
}
}
int bfs()
{
int t[4],dis[MAXN],vis[MAXN];
int i,j,v;
queue<int> q;
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
q.push(first);
vis[first] = 1;
while(!q.empty())
{
int x = q.front();
q.pop();
t[0] = x/1000;
t[1] = x%1000/100;
t[2] = x%100/10;
t[3] = x%10;
if(x == last)
return dis[x];
for(i = 0;i<4;i++)
{
int temp = t[i];
for(j = 0;j<10;j++)
{
if(temp != j)
{
t[i] = j;
v = t[0]*1000+t[1]*100+t[2]*10+t[3];
if(!vis[v]&&prime[v])
{
vis[v] = 1;
dis[v] = dis[x]+1;
q.push(v);
}
if(v == last)
return dis[v];
}
t[i] = temp;
}
}
}
return -1;
}

int main()
{
//freopen("caicai.txt","r",stdin);
int n;
scanf("%d",&n);
dabiao();
while(n--)
{
cin>>first>>last;
int num = bfs();
if(num == -1)
cout<<"Impossible\n";
else cout<<num<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: