Poj3126
来源:互联网 发布:stm32f 输入端口写法 编辑:程序博客网 时间:2024/06/05 12:07
3126Accepted200K0MSC++1902Bbfs
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>//#pragma warning(disable:4996)using namespace std;const int MAX_N=10005;const int INF=0x3fffffff;bool isPrim[MAX_N];void createPrimTable(){ memset(isPrim,1,sizeof(isPrim)); isPrim[0]=isPrim[1]=false; isPrim[2]=true; for(int i=2;i*i<=10000;++i){ if(isPrim[i]) for(int j=i*i;j<10000;j+=i) isPrim[j]=false; }}int d[MAX_N];int dfs(int s,int g){ fill(d,d+MAX_N+1,INF); queue<int> q; q.push(s); d[s]=0; while(!q.empty()){ int p=q.front();q.pop(); if(p==g) return d[p]; int thousandBit=p/1000; int hundredBit=p/100-10*thousandBit; int tenBit=(p%100)/10; int oneBit=p%10; for(int i=1;i<=9;i++){ int tmp=p-(thousandBit-i)*1000; if(isPrim[tmp]&&d[tmp]==INF){ q.push(tmp); d[tmp]=d[p]+1; } } for(int i=0;i<=9;i++){ int tmp=p-(hundredBit-i)*100; if(isPrim[tmp]&&d[tmp]==INF){ q.push(tmp); d[tmp]=d[p]+1; } } for(int i=0;i<=9;i++){ int tmp=p-(tenBit-i)*10; if(isPrim[tmp]&&d[tmp]==INF){ q.push(tmp); d[tmp]=d[p]+1; } } for(int i=1;i<=9;i+=2){ int tmp=p-(oneBit-i)*1; if(isPrim[tmp]&&d[tmp]==INF){ q.push(tmp); d[tmp]=d[p]+1; } } } return d[g];}int main(){ createPrimTable(); int n; scanf("%d",&n); while(n--){ int s,g; scanf("%d%d",&s,&g); dfs(s,g); if(d[g]!=INF) printf("%d\n",d[g]); else printf("Impossible\n"); } return 0;}
0 0
- poj3126
- POJ3126
- poj3126
- poj3126
- poj3126
- POJ3126
- poj3126
- poj3126
- poj3126
- poj3126
- poj3126
- poj3126
- poj3126
- POJ3126
- Poj3126
- poj3126
- poj3126
- POJ3126
- SpringMVC简单入门(注解)<学习随笔>
- JS 案例-添加节点
- php-fpm 启动参数及重要配置详解
- android__实践(电话拨号器)
- scala实现设计模式之访问者模式
- Poj3126
- 在MFC单文档程序中,怎样由子窗口控件调用父窗口中的控件
- CERC-2014 K题 - The Imp (博弈DP)
- 以小组形式利用testlink测试软件项目
- centos 6.5下安装中文输入法
- android__实践(登陆界面)
- 制作第一个网页的代码
- UVA_11039_BuildingDesigning
- C++--------------------------------------------运算符重载