首页 > 代码库 > PRIME PATH
PRIME PATH
http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1450
输入:
两个素数s和e(1000<s,e<9999)
输出:
每次改变一位(要求生成的数也为素数且最高位非0),输出s到e的改变的最小次数。
解题思路:
1.经典的bfs,当某一个节点的值第一次等于e的时候即为所求,且一定改变次数最小。
2.用两个队列,队列1存解空间树的奇数层节点,队列2存解空间树的偶数层节点。
3.两个队列循环出队列,入队列,队列1出的时候生成的节点全部入队列2,队列2出的时候生成的节点全部入队列1。当队列1或队列2空的时候步数加1。
核心代码:
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | q1.push(s); isvis[s]= true ; while (!q1.empty()) { while (!q1.empty()) { tmp=q1.front(); q1.pop(); if (tmp==e) { flag= true ; break ; } for (j=0;j<4;j++) { dat[j]=tmp%10; tmp/=10; } for (j=0;j<4;j++) { tmp=0; for (k=0;k<4;k++) if (k!=j) tmp+=dat[k]* pow (( double )10,( double )k); for (k=0;k<=9;k++) { tmp+=k* pow (( double )10,( double )j); if (v[tmp]== false &&tmp>1000&&isvis[tmp]== false ) { q2.push(tmp); isvis[tmp]= true ; } tmp-=k* pow (( double )10,( double )j); } } } if (flag== true ) break ; cnt++; while (!q2.empty()) { tmp=q2.front(); q2.pop(); q1.push(tmp); } } |
PRIME PATH
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。