poj3126Prime Path(bfs)
来源:互联网 发布:fc2无域名版 编辑:程序博客网 时间:2024/06/15 19:46
题目链接:
http://poj.org/problem?id=3126
这道题就是给你两个4位的素数,问你每次只能变换一个位数上的数字,问你需要几次操作把这个数变成另一个。
就是每次都变一个放入队列就好了。。
AC代码:
#include<stdio.h>#include<iostream>#include<string.h>#include<math.h>#include<queue>#include<algorithm>using namespace std;#define maxn 10100int vis[maxn],cnt[maxn],prim[maxn];int star,end;int dig[5];void init(){ int i,j; memset(prim,0,sizeof(prim)); for(i=1000;i<=10000;i++) { for(j=2;j<i;j++) { if(i%j==0) break; } if(i==j) prim[i]=1; }}int bfs(int st){ int v,temp,num; memset(cnt,0,sizeof(cnt)); memset(vis,0,sizeof(vis)); queue<int> q; q.push(st); vis[st]=1; while(!q.empty()) { v=q.front(); dig[0]=v/1000; dig[1]=v%1000/100; dig[2]=v%100/10; dig[3]=v%10; //printf("%d %d %d %d\n",dig[0],dig[1],dig[2],dig[3]); q.pop(); for(int i=0;i<4;i++) { temp=dig[i]; for(int j=0;j<=9;j++) { if(temp!=j) { dig[i]=j; num=dig[0]*1000+dig[1]*100+dig[2]*10+dig[3]; if(vis[num]==0 && prim[num] ==1) { vis[num]=1; q.push(num); cnt[num]=cnt[v]+1; } if(num==end) return cnt[num]; } } dig[i]=temp; } if(v==end) return cnt[v]; } return -1;}int main(){ int t,ans; scanf("%d",&t); init(); while(t--) { scanf("%d%d",&star,&end); ans=bfs(star); if(ans==-1) printf("Impossible\n"); else printf("%d\n",ans); }}
0 0
- poj3126Prime Path(bfs)
- POJ3126Prime Path(BFS)
- poj3126Prime Path(BFS)
- POJ3126Prime Path 暴力BFS
- poj3126Prime Path
- poj3126Prime Path
- poj3126prime path
- POJ3126Prime Path
- poj3126Prime Path(bfs水题~~~我喜欢哈哈哈哈哈哈)
- POJ3126Prime Path(AC)
- POJ3126Prime Path 基本广搜
- pku3126 Prime Path BFS
- 【BFS】Prime Path
- BFS | 3126 | Prime Path
- BFS Prime Path
- POJ_3126_Prime Path(数论+BFS)
- [POJ3126]Prime Path+BFS
- Prime Path(bfs)
- android创建数据库及adb查看数据库
- linux指令-新人累积
- eclipse luna版本安装svn
- 南邮编程在线编程题六:数列求和
- java中Ping++退款
- poj3126Prime Path(bfs)
- 2015年大二上-数据结构-数组与广义表(4)-广义表算法库及应用
- Sublime Text2 新建文件快速生成Html头部信息和炫酷的代码补全
- oracle 00257归档日志错误后续及查看alert.log的方法
- linux内核3.4基于wakeup_source的autosleep机制分析
- iOS SQLite如何连续插入多行数据
- 黑马程序员——Java之反射
- mysql的基本操作
- 数根