hdu3126 Prime Path
来源:互联网 发布:淘宝卖音乐是什么类目 编辑:程序博客网 时间:2024/09/21 09:19
http://poj.org/problem?id=3126
题目大意:就是说给你两个素数,让你每次可以改变第一个素数的某一位数,而且这个新的数也必须是素数,问经过多少次这样的变形,可以得到开始给出的第二个素数。
思路:
一开始以为是数论的题目,后来才发现是搜索,对素数打表,然后每次都搜索素数表就行
#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<queue>using namespace std;int st[10005],v[10005];int cnt[10005];int t[5];void prim(){int i,j;st[0]=1;st[1]=1;for (i=2;i<10000;i++){if(st[i]==0)for (j=i*2;j<10000;j+=i){st[j]=1;}}}int bfs(int now,int last){int i,j,tmp,xx;int cur,next;memset(cnt,0,sizeof(cnt));queue<int>q;q.push(now);while(!q.empty()){cur=q.front();q.pop();//printf("%d %d\n",cur.num,last);if(cur==last)return cnt[cur];t[0]=cur/1000;t[1]=cur/100%10;t[2]=cur/10%10;t[3]=cur%10;//printf("%d %d %d %d %d\n",cur,t[0],t[1],t[2],t[3]);for(i=0;i<4;i++){tmp=t[i];for(j=0;j<10;j++){if(tmp!=j){t[i]=j;xx=t[0]*1000+t[1]*100+t[2]*10+t[3];if(!v[xx]&&st[xx]==0){v[xx]=1;cnt[xx]=cnt[cur]+1;//printf("%d %d\n",xx,next.step);q.push(xx);}if(xx==last)return cnt[xx];}t[i]=tmp;}}}return -1;}int main(){int i,j,x,y,n;memset(st,0,sizeof(st));prim();for(i=0;i<1000;i++)st[i]=1;scanf("%d",&n);while(n--){memset(v,0,sizeof(v));scanf("%d%d",&x,&y);v[x]=1;int ans=bfs(x,y);if(ans!=-1)printf("%d\n",ans);else{printf("Impossible\n");}}}
0 0
- hdu3126 Prime Path
- Prime Path
- Prime Path
- PRIME PATH
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- Prime Path
- 计算机基础--网络攻击基础01
- Android中在一个应用程序中定义多个Activity,及启动多个Activity
- XML读、查、删
- Cocos2dx 3.2的中文显示
- 【平安科技】在线编程大赛活动 - 一道通过率只有1.5%的编程挑战题目
- hdu3126 Prime Path
- AJAX入门---DOM操作HTML
- 兼容各个浏览器实现键盘响应事件
- 二叉树(一)——二叉树的基本实现(数组实现和链表实现)
- Cocos2dx 小技巧(十五)话说ScrollView的delegate实现过程
- rpmbuild rpm package
- SiteMesh 初试 学习之路1
- Spring @Resource注解
- Data Guard Physical Standby - Managing temporary tablespace tempfiles (文档 ID 1514588.1)