poj3126
被坑了3个小时,本来以为算法错了,谁知道,竟然是素数筛弄错了
!!!
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int a[10001];
int v[10001];
int n,m;
struct node
{
int ans,x;
}q[100001];
void bfs()
{
memset(v,0,sizeof(v));
struct node t,f;
int e=0;
int s=0;
t.ans=0;
t.x=n;
v[t.x]=1;
q[e++]=t;
while(s<e)
{
t=q[s++];
if(t.x==m)
{
printf("%d\n",t.ans);
break;
}
for(int i=0;i<=9;i++)
{
if(v[(t.x/10)*10+i]==0&&a[(t.x/10)*10+i]==1)
{
f.x=(t.x/10)*10+i;
f.ans=t.ans+1;
q[e++]=f;
v[(t.x/10)*10+i]=1;
}
if(v[(t.x/100)*100+t.x%10+i*10]==0&&a[(t.x/100)*100+t.x%10+i*10]==1)
{
f.x=(t.x/100)*100+t.x%10+i*10;
f.ans=t.ans+1;
q[e++]=f;
v[(t.x/100)*100+t.x%10+i*10]=1;
}
if(v[(t.x/1000)*1000+(t.x/10)%10*10+t.x%10+i*100]==0&&a[(t.x/1000)*1000+(t.x/10)%10*10+t.x%10+i*100]==1)
{
f.x=(t.x/1000)*1000+(t.x/10)%10*10+t.x%10+i*100;
f.ans=t.ans+1;
q[e++]=f;
v[(t.x/1000)*1000+(t.x/10)%10*10+t.x%10+i*100]=1;
}
}
for(int i=1;i<=9;i++)
{
if(v[t.x%10+(t.x/10)%10*10+(t.x/10/10)%10*100+i*1000]==0&&a[t.x%10+(t.x/10)%10*10+(t.x/10/10)%10*100+i*1000]==1)
{
f.x=t.x%10+(t.x/10)%10*10+(t.x/10/10)%10*100+i*1000;
f.ans=t.ans+1;
q[e++]=f;
v[t.x%10+(t.x/10)%10*10+(t.x/10/10)%10*100+i*1000]=1;
}
}
}
}
int main()
{
a[0]=0;
a[1]=0;
a[2]=1;
int t=(int )sqrt(10000*1.0);
for(int i=3;i<10000;i++)
{
if(i%2==0)
a[i]=0;
else a[i]=1;
}
for(int i=3;i<=t;i++)
{
if(a[i]==1)
{
for(int j=2*i;j<10000;j=j+i)
a[j]=0;
}
}
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
bfs();
}
return 0;
}
poj3126的更多相关文章
- POJ3126 Prime Path (bfs+素数判断)
POJ3126 Prime Path 一开始想通过终点值双向查找,从最高位开始依次递减或递增,每次找到最接近终点值的素数,后来发现这样找,即使找到,也可能不是最短路径, 而且代码实现起来特别麻烦,后来 ...
- 《挑战程序设计竞赛》2.6 数学问题-素数 AOJ0009 POJ3126 3421 3292 3641
AOJ0009 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0009 题意 求不大于n的素数个数. 思路 素数筛法可解,筛法过程中 ...
- POJ-3126 Prime Path---BFS+素数打表
题目链接: https://vjudge.net/problem/POJ-3126 题目大意: 给两个四位数a,b 每次改变a中的一位而且改动之后的必须是素数,问最少改动几次可以到b?(永远达不到b就 ...
- poj3126 筛素数+bfs
//Accepted 212 KB 16 ms //筛素数+bfs #include <cstdio> #include <cstring> #include <iost ...
- POJ3126 Prime Path
http://poj.org/problem?id=3126 题目大意:给两个数四位数m, n, m的位数各个位改变一位0 —— 9使得改变后的数为素数, 问经过多少次变化使其等于n 如: 10331 ...
- POJ3126 Prime Path(BFS)
题目链接. AC代码如下: #include <iostream> #include <cstdio> #include <cstring> #include &l ...
- poj3126(bfs)
题目链接:http://poj.org/problem?id=3126 题意:给两个四位数n,m,将n变成m需要多少步,要求每次只能改变n的某一位数,即改变后的数与改变前的数只有一位不同,且每次改变后 ...
- poj3126解题报告
题意:简单的说就是:有一个人门牌号是一个四位数的整数,并且还是一个素数,现在他想要换成另外一个四位数且是素数的门牌号,而且,每次都只能更换这个四位数的一个位置的数 ,也就是每换一次都只改变一个数字,而 ...
- poj3126 Prime Path 广搜bfs
题目: The ministers of the cabinet were quite upset by the message from the Chief of Security stating ...
- Prime Path[POJ3126] [SPFA/BFS]
描述 孤单的zydsg又一次孤单的度过了520,不过下一次不会再这样了.zydsg要做些改变,他想去和素数小姐姐约会. 所有的路口都被标号为了一个4位素数,zydsg现在的位置和素数小姐姐的家也是这样 ...
随机推荐
- C语言程序设计--文件操作
前言 这里尝试与Python对别的方法来学习C语言的文件操作,毕竟我是Pythoner. 文件打开与关闭 Python #因为是和C语言比对,所以不使用with filename = "/e ...
- Project Move from Qt 4 to Qt 5 项目工程的迁移
将Qt4的项目迁到Qt5中并不需要新建一个Qt5的工程,可以直接在原工程文件上修改,这里我们使用的是VS2010和Qt5.4的环境,我们需要做以下修改: 1. 在工程里找到这个文件:工程名.vcxpr ...
- c# 串口关闭死机
用C#编写的wince串口通信程序基本大功告成了,与之前用API函数和线程来做串口通信不同,这次直接使用SerialPort控件来做,原本以为使用控件做会简单和方便许多,没成想,还遇到了很多麻烦. 通 ...
- [No0000185]Java技术板块图
.List 和 Set 的区别 .HashSet 是如何保证不重复的 .HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)? .HashMap 的扩容过程 .Has ...
- [No000016C]做企业分析的三个重要工具
个工具>这本书,内容很基础,但是逻辑很清晰.里面介绍了三个常用的分析方法:pest分析法.波特五力模型以及swot分析法,为脑袋里没有分析思路的人提供了分析框架. 故将这三个分析方法做成了思维导 ...
- [No0000143]Win10“卓越性能模式”
从不久之前Win10更新1803以来,微软不仅带来了一些新功能(和BUG),还悄悄地加入了一个“卓越性能模式”,老张想了想,不对呀,以前就有了一个“高性能模式”,这怎么就还多出个新的性能模式来,难道会 ...
- JSP+Servlet+JavaBean实现数据库的增删改查
基本思想:JSP文件显示页面,使用form或href超链接传值到Servlet中方法,在Servlet方法中调用Dao层的类对象,实现对数据库里的数据的增删改查,之后重新返回到JSP输出操作完的结果. ...
- DACLs and ACEs
[Windows]Windows的访问控制模型 - Zplutor - 博客园 https://www.cnblogs.com/zplutor/archive/2010/01/05/1639892.h ...
- mysql root看不到mysql表
1.首先停止mysql服务:service mysqld stop2.加参数启动mysql:/usr/bin/mysqld_safe --skip-grant-tables & 然后就可以无任 ...
- [daily][samba] smbclient使用
用的也不是太明白,反正凑合用吧. 在用之前,只得到了两个信息,1:ip 192.168.30.9. 2:可以免密登录. 1. 用这个命令看一看,主要是找到这个目录:Anonymous ┬─[t ...