HDU 6223 Infinite Fraction Path [bfs+剪枝]

题意:给一个长度为n的只包含0~9数字的串,位置从0开始,下标i的下一个位置是(i*i+1)%n,问其中字符个数为n的路径的最大数字为多少。

题解:首先存入最大的数字为开始bfs,然后寻找所有可能情况,这里有两个剪枝:1、当前数字小的数字可以不继续进行。2、当前层走过的位置可以不继续进行。

AC代码:

#include
#include
#include
#define N 150005
using namespace std;
typedef long long ll;
char a[N],ans[N];
bool temp[N];
ll sta[N],top;
struct node
{
    ll index,step;
    node(){}
    node(ll index,ll step)
    {
        this->index=index;
        this->step=step;
    }
};
priority_queueque;
bool operator<(node A,node B)
{
    if(A.step==B.step)return a[A.index]B.step;
}
int main()
{
    ll T;
    scanf("%lld",&T);
    ll cas=1;
    while(T--)
    {
        ll n;
        scanf("%lld",&n);
        for(ll i=0;ia[k.index]||k.step>=n||temp[k.index])continue;
            sta[top++]=k.index;
            temp[k.index]=true;
            ans[k.step]=a[k.index];
            que.push(node((k.index*k.index+1)%n,k.step+1));
        }
        while(top)temp[sta[--top]]=false;
        printf("Case #%lld: ",cas++);
        for(ll i=0;i


你可能感兴趣的:(bfs)