博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3126 Prime Path (bfs)
阅读量:7053 次
发布时间:2019-06-28

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

给两个素数,求第一个素数转变成第二个素数所需最小步骤数。每次转换只能改变一位,且转换的中间数都为素数。

最短路径问题,打出一个素数表,对4位数的各个位置0..9暴搜。

比较郁闷的是sqrt()和pow()中必须要用强制转换才行,不记得以前要这样用啊??CE了几次。

code:

#include<cstdio>
#include<cmath>
#include<cstring>
using 
namespace std ;
bool prim[
10000] ;
bool vis[
10000] ;
int q[
1000] ;
void getPrim(){
    
for(
int i=
1000; i<
10000; i++){
        prim[i] = 
true ;
        
for(
int j=
2; j<=sqrt((
double)i); j++){
//
这里必须要强制为double
            
if(i%j==
0){
                prim[i] = 
false ;
                
break ;
            }
        }
    }
}
int reset(
int x, 
int i){
    
int temp[
4], y = 
0 ;
    
for(
int j=
0; j<
4; j++){
        temp[j] = x % 
10 ;
        x = x / 
10 ;
    }
    temp[i] = 
0 ;
    
for(
int j=
0; j<
4; j++)
        y += temp[j] * pow((
double)
10, j) ;
    
return y ;
}
int main(){
    
int t, n, m, flag, h, r, head, temp, ans ;
    scanf(
"
%d
", &t) ;
    getPrim() ;
    
while(t--){
        scanf(
"
%d%d
", &n, &m) ;
        
if(n==m){
            printf(
"
0\n
") ;
            
continue ;
        }
        memset(vis, 
false
sizeof(vis)) ;
        flag = 
0, ans = 
0 ;
        q[
0] = n, h = 
0, r = 
1 ;
        
while(r>h&&!flag){
            
int k = r - h ;
            ans ++ ;
            
while(k--){
                head = q[h++] ;
                
for(
int i=
0; i<
4; i++){
                    temp = reset(head, i) ;
                    
for(
int j=
0; j<=
9; j++){
                        
int tem = temp + j * pow((
double)
10, i) ;
                        
if(tem==m){
                            flag = 
1 ;
                            
break ;
                        }
                        
if(!vis[tem]&&prim[tem]){
                            q[r++] = tem ;
                            vis[tem] = 
true ;
                        }
                    }
                }
            }
        }
        printf(
"
%d\n
", ans) ;
    }
    
return 
0 ;

}

转载于:https://www.cnblogs.com/xiaolongchase/archive/2012/02/16/2353502.html

你可能感兴趣的文章
IntelliJ IDEA常见问题解决办法汇总
查看>>
[LeetCode] Container With Most Water 装最多水的容器
查看>>
poj 3624 Charm Bracelet 背包DP
查看>>
用dedecms自定义表单创建简易自助预约系统
查看>>
读《了解你的学生》有感
查看>>
dedecms /member/flink_main.php SQL Injection Vul
查看>>
Dropbox Folder Sync – 让 Dropbox 同步任意文件夹
查看>>
PHP 网页爬虫
查看>>
用户队列服务API
查看>>
C# word开发
查看>>
spring mvc 与 jasper Report集成
查看>>
java学习笔记14--动态代理
查看>>
最简单的可取消多选效果(以从水果篮中挑选水果为例)【jsDEMO】
查看>>
worksteal thread pool
查看>>
视频数据采集模块设计
查看>>
跟我extjs5(38--单个模块的设计[6获得模块列表数据])
查看>>
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数...
查看>>
Oracle修改默认字符编码
查看>>
HDU ACM 2845 Beans-&gt;动态规划
查看>>
EBS创建相应的用户
查看>>