poj1741,poj 3126 BFS

 2023-10-21 阅读 34 评论 0

摘要:??? BFS得到的一定是最短路徑。開始我還在糾結怎么才是最短的呢。其實BFS的題目有個共性(這不廢話,哪一類題沒有共性啊。呵呵)。以后做這種題自己慢慢總結吧。 ? ?? 這題的思路就是寫枚舉出4位數的所有prime number,用個數組p[]標記。再用個數組v

??? BFS得到的一定是最短路徑。開始我還在糾結怎么才是最短的呢。其實BFS的題目有個共性(這不廢話,哪一類題沒有共性啊。呵呵)。以后做這種題自己慢慢總結吧。

?

?? 這題的思路就是寫枚舉出4位數的所有prime number,用個數組p[]標記。再用個數組visit[]標記某個數是否被訪問過,避免重復訪問.然后就是對這四位數的每一位進行BFS啦!

poj1741??

#include <iostream>
#include <cstdio>
#include <queue>
#include <fstream>
#include <memory.h>

using namespace std;

int p[10000],visit[10000];
int n,a,b;
int Index[4];
struct node
{
int num,step;
}ans[10000];

bool prime(int n)
{
for(int i=2; i*i<=n ; i++)
{
if(n%i==0)
return false;
}
return true;
}

int bfs()
{
int j=0,i;
queue<node> q;
ans[j].num=a;
ans[j].step=0;
visit[a]=1;
q.push(ans[j]);
while(!q.empty())
{
node next;
next=q.front();
q.pop();
if(next.num==b)
{
return next.step;
}
Index[0]=next.num/1000; Index[1]=(next.num%1000)/100;
Index[2]=(next.num%100)/10; Index[3]=next.num%10;
for(i=0 ; i<10 ;i++)
{
if(i==Index[3])
continue;
int l=next.num+i-Index[3];
if(!visit[l] && p[l])
{
ans[++j].num=l;
ans[j].step=next.step+1;
visit[l]=1;
q.push(ans[j]);
}
}
for(i=0 ; i<10 ;i++)
{
if(i==Index[2])
continue;
int l=next.num+(i-Index[2])*10;
if(!visit[l] && p[l])
{
ans[++j].num=l;
ans[j].step=next.step+1;
visit[l]=1;
q.push(ans[j]);
}
}
for(i=0 ; i<10 ;i++)
{
if(i==Index[1])
continue;
int l=next.num+(i-Index[1])*100;
if(!visit[l] && p[l])
{
ans[++j].num=l;
ans[j].step=next.step+1;
visit[l]=1;
q.push(ans[j]);
}
}
for( i=0 ; i<10 ;i++)
{
if(i==Index[0])
continue;
int l=next.num+(i-Index[0])*1000;
if(!visit[l] && p[l])
{
ans[++j].num=l;
ans[j].step=next.step+1;
visit[l]=1;
q.push(ans[j]);
}
}

}

}

int main()
{
freopen("acm.txt","r",stdin);
memset(p,0,sizeof(p));
scanf("%d",&n);
for(int i=1000; i<10000; i++)
{
if(prime(i))
p[i]=1; //is prime number
}
while(n--)
{
memset(visit,0,sizeof(visit));
scanf("%d%d",&a,&b);
printf("%d\n",bfs());
}
return 0;
}

?

轉載于:https://www.cnblogs.com/Jason-Damon/archive/2012/03/14/2397114.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/154304.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息