| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我也是,真的懵逼In Reply To:奇怪的错误。。。 Posted by:liuyuhui at 2017-05-19 11:00:42 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
#include <queue>
using namespace std;
#define mem(a) memset(a,0,sizeof(a))
#define ll long long
const int maxn = 100100;
const int inf = 0x3f3f3f3f;
int t,n,m;
bool vis[10000];
set<int> a;
void init()
{
int i,j,k=0;
for(i = 1001; i < 10000; i+=2)
{
for(j = 2; j <= sqrt(i); j++)
{
if(i%j == 0) break;
}
if(j > sqrt(i)) a.insert(i);
}
}
struct node
{
int num,step;
};
void bfs()
{
mem(vis);
node x,y;
vis[n] = 1;
x.num = n,x.step = 0;
queue <node> q;
q.push(x);
while(!q.empty())
{
x = q.front();
q.pop();
if(x.num == m)
{
printf("%d\n",x.step);
}
int ge = x.num-x.num%10;
int shi = x.num - (x.num%100-x.num%10);
int bai = x.num - (x.num%1000/100)*100;
int qi = x.num%1000;
for(int i = 1; i <10 ; i+=2)
{
y.num = ge+i;
if(a.count(y.num) && !vis[y.num])
{
y.step = x.step+1;
vis[y.num] = 1;
q.push(y);
}
}
for(int i = 0; i <10 ; i++)
{
y.num = shi+i*10;
if(a.count(y.num) && !vis[y.num])
{
y.step = x.step+1;
vis[y.num] = 1;
q.push(y);
}
}
for(int i = 0; i <10 ; i++)
{
y.num = bai+i*100;
if(a.count(y.num) && !vis[y.num])
{
y.step = x.step+1;
vis[y.num] = 1;
q.push(y);
}
}
for(int i = 1; i <10 ; i++)
{
y.num = qi+i*1000;
if(a.count(y.num) && !vis[y.num])
{
y.step = x.step+1;
vis[y.num] = 1;
q.push(y);
}
}
}
}
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0),cout.tie(0);
init();
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
bfs();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator