博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Prime Path
阅读量:5025 次
发布时间:2019-06-12

本文共 1605 字,大约阅读时间需要 5 分钟。

题目链接:

题意:每组测试案例给出两个数a,b,从数字a开始,每次只改变当前数中的一位数,使之仍为一个素数,问经过多少步骤能够得到数字b。

代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 int cnt[10000]; 8 bool vis[10000]; 9 bool prime[10000];10 void init()11 {12 int key;13 for (int i = 1000;i <= 9999;i++){14 key = 1;15 for (int j = 2;j < i;j++){16 if (i%j == 0){17 key = 0;18 break;19 }20 }21 if (key)22 prime[i] = true;23 }24 }25 26 int bfs(int snum,int endnum)27 {28 memset(vis,0,sizeof(vis));29 memset(cnt,0,sizeof(cnt));30 queue
q;31 vis[snum]=1;32 q.push(snum);33 int bit[10];34 while(!q.empty()){35 int temp=q.front();36 q.pop();37 if(temp==endnum)38 return cnt[endnum];39 bit[1]=temp/1000; bit[2]=(temp/100)%10; bit[3]=(temp/10)%10; bit[4]=temp%10;40 for(int bi=1;bi<=4;bi++){41 int temp1=bit[bi];42 for(int i=0;i<10;i++){43 if(bi==1 && i==0)44 continue;45 bit[bi]=i;46 int sum=bit[1]*1000+bit[2]*100+bit[3]*10+bit[4];47 if(prime[sum]&&(!vis[sum])){48 vis[sum]=1;49 cnt[sum]=cnt[temp]+1;50 q.push(sum);51 }52 }53 bit[bi]=temp1;54 }55 }56 return -1;57 }58 int main()59 {60 init();61 int snum,endnum,ans,T;62 scanf("%d",&T);63 while(T--){64 scanf("%d%d",&snum,&endnum);65 ans=bfs(snum,endnum);66 if(ans==-1)67 printf("Impossible\n");68 else69 printf("%d\n",ans);70 }71 return 0;72 }
View Code

 

转载于:https://www.cnblogs.com/LJHAHA/p/10427690.html

你可能感兴趣的文章
T-SQL查询进阶--深入浅出视图
查看>>
MapKeyboard 键盘按键映射 机械革命S1 Pro-02
查看>>
Android读取url图片保存及文件读取
查看>>
完整ASP.Net Excel导入
查看>>
判断CPU大小端示例代码
查看>>
ARTS打卡第13周
查看>>
循环队列的运用---求K阶斐波那契序列
查看>>
pta 编程题14 Huffman Codes
查看>>
初始化bootstrap treeview树节点
查看>>
python selenium向<sapn>标签中写入内容
查看>>
JS常用坐标
查看>>
使用”结构化的思考方式“来编码和使用”流程化的思考方式“来编码,孰优孰劣?...
查看>>
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>
关于git的认证方式
查看>>
字符串按照字典序排列
查看>>
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>
python itertools
查看>>