您的位置:首页 > 其它

POJ 3126 Prime Path(kuangbin带你飞 专题一:简单搜索)

2015-01-25 15:16 435 查看
刚开始以为要输出变换路径...惆怅好久,后来发现并不需要,然后果断AC。

标记数组先把非素数的都标记为用过...然后进行bfs,删除某一位的数字然后填0-9...

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<algorithm>
#include<ctype.h>
#include<iostream>
using namespace std;
int used[20000],n,k,mini;
int ok(int x)
{
if(x<1000||x>10000)
return 0;
if(used[x])
return 0;
return 1;
}
struct node
{
int x,t;
};
int bfs()
{
queue<node> q;
node now,next;
memset(used,0,sizeof(used));
used[0]=used[1]=1;
for(int i=2;i<=10000;i++)
{
if(used[i]==1)
continue;
for(int j=i+i;j<=10000;j+=i)
used[j]=1;
}
now.x=n,now.t=0;
used
=1;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
if(now.x==k)
return now.t;
for(int i=0;i<=9;i++)
{
next.x=now.x%1000+i*1000;
if(ok(next.x))
{
used[next.x]=1;
next.t=now.t+1;
q.push(next);
}
next.x=now.x%100+now.x/1000*1000+100*i;
if(ok(next.x))
{
used[next.x]=1;
next.t=now.t+1;
q.push(next);
}
next.x=now.x%10+i*10+now.x/100*100;
if(ok(next.x))
{
used[next.x]=1;
next.t=now.t+1;
q.push(next);
}
next.x=now.x/10*10+i;
if(ok(next.x))
{
used[next.x]=1;
next.t=now.t+1;
q.push(next);
}
}
}
return -1;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int ans;
cin>>n>>k;
ans=bfs();
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: