标签:++ space number mod pos first correct who purchase
0
//这题是求从第一个数字变为第二个数字最少须要变几次,每一次仅仅能改变一个数字,而且要满足改变之后的仍然是素数
//从第一个字符到第四个字符相当于迷宫中的四个方向 接着每次改变从0-9注意开头第一个字符不能以0开头
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
bool vis[9999]; //标记数组
char start[10]; //起始数字用字符串处理
int stop; //结尾数字
struct Node
{
char tem[10];
int step;
};
int prime(int n) //推断素数
{
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int bfs(char p[])
{
queue <Node> q;
memset(vis,0,sizeof(vis));
int temp;
Node a;
strcpy(a.tem,p);
a.step=0;
q.push(a);
while(!q.empty())
{
Node b;
b=q.front();
q.pop();
sscanf(b.tem,"%d",&temp); //利用sscanf函数将字符串转换为数字直接与结尾比較
if(temp==stop)
return b.step;
vis[temp]=1;
for(int i=0;i<4;i++)
{
char k;
k=i!=0?'0':'1';
for(;k<='9';k++)
{
Node c;
c=b;
c.tem[i]=k;
sscanf(c.tem,"%d",&temp);
if(prime(temp)&&!vis[temp]) //约束条件
{
c.step++;
q.push(c);
vis[temp]=1;
}
}
}
}
return -1;
}
int main()
{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
scanf("%s%d",start,&stop);
int flag=bfs(start);
int flag=bfs(start);
if(flag==-1)
printf("Impossible\n");
else
printf("%d\n",flag);
}
return 0;
}
标签:++ space number mod pos first correct who purchase
原文地址:http://www.cnblogs.com/brucemengbm/p/7136957.html