消息关闭
    暂无新消息!

poj3126 prime path

问题作者 : 杨春元2017-07-06发布
poj3126 prime path,提交后显示compile error,但是找不到问题在哪,求大神请教!!!


代码:
[align=center]#include<iostream>
#include<queue>
#include<math.h>
#include<string.h>
using namespace std;
struct Node
{
int x;
int step;
};
bool vis[10000];
Node m;
int n;
queue<Node>nums;
bool isPrime(int x)
{
if(x<2)return false;
if(x==2||x==5||x==7)return true;
int i;
for(i=2;i<sqrt(x);i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
bool bfs(Node num)
{
if(num.x==n)
{
cout<<num.step<<endl;
return true;
}
Node v;
v.step=num.step+1;
int gw=num.x%10;
int i;
int dw=(num.x/10)*10;
for(i=2;i<10;i+=2)
{
if(vis[dw+(gw+i)%10]==0&&isPrime(dw+(gw+i)%10)==1)
{
v.x=dw+(gw+i)%10;
nums.push(v);
vis[dw+(gw+i)%10]=1;
}
}
int sw=(num.x%100)/10;
dw=(num.x/100)*100;
for(i=1;i<10;i++)
{
if(vis[dw+((sw+i)%10)*10+gw]==0&&isPrime(dw+((sw+i)%10)*10+gw))
{
v.x=dw+((sw+i)%10)*10+gw;
nums.push(v);
vis[dw+((sw+i)%10)*10+gw]=1;
}
}
int bw=(num.x%1000)/100;
dw=(num.x/1000)*1000;
for(i=1;i<10;i++)
{
if(vis[dw+((bw+i)%10)*100+sw*10+gw]==0&&isPrime(dw+((bw+i)%10)*100+sw*10+gw))
{
v.x=dw+((bw+i)%10)*100+sw*10+gw;
nums.push(v);
vis[dw+((bw+i)%10)*100+sw*10+gw]=1;
}
}
int qw=num.x/1000;
dw=num.x%1000;
for(i=1;i<10;i++)
{
if(((qw+i)%10)!=0&&vis[((qw+i)%10)*1000+dw]==0&&isPrime(((qw+i)%10)*1000+dw))
{
v.x=((qw+i)%10)*1000+dw;
nums.push(v);
vis[((qw+i)%10)*1000+dw]=1;
}
}
nums.pop();
if(nums.empty()==0)
return bfs(nums.front());
return false;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>m.x;
cin>>n;
memset(vis,0,sizeof(vis));
m.step=0;
nums.push(m);
if(bfs(nums.front())==false)
{
cout<<"Impossible"<<endl;
}
while(nums.empty()==0)
{
nums.pop();
}
}
}[/align]

3个回答