HDU 4474 BFS

本文介绍了一个结合广度优先搜索(BFS)与大数取模算法的问题解决案例。通过具体代码实现,展示了如何在限制条件下找到满足特定取模结果的数字序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单BFS + 大数取模的应用

因为n最大10000 暴搜一遍即可

#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;

const int MAXN = 10007;
struct node
{
	int v,m,pre;
	void init(int tv,int tm,int tpre)
	{
		v = tv, m = tm, pre = tpre;
	}
}e[MAXN];
bool exist[MAXN];
bool enable[10];

int main()
{
	int n,m,id=0;
	while(~scanf("%d%d",&n,&m))
	{
		memset(enable,0,sizeof(enable));
		int i,x;
		for(i=0;i<m;i++)
		{
			scanf("%d",&x);
			enable[x] = true;
		}

		printf("Case %d: ",++id);

		memset(exist,0,sizeof(exist));
		bool bans = false;
		int ent=0;
		queue<int> q;
		e[ent].init(0,0,-1);
		q.push(ent ++);
		while(!q.empty())
		{
			int u=q.front();
			q.pop();
			for(i=0;i<10;i++)
			{
				if( !enable[i] )
				{
					if(e[u].pre == -1 && i == 0)
					{
						continue;
					}
					int tm = (e[u].m * 10 + i ) %  n;
					if(tm == 0)
					{
						stack<int> answer;
						answer.push(i);
						while( e[u].pre != -1)
						{
							answer.push(e[u].v);
							u = e[u].pre;
						}
						while(!answer.empty())
						{
							putchar('0' + answer.top());
							answer.pop();
						}
						puts("");
						bans = true;
						break;
					}
					if( !exist[tm] )
					{
						e[ent].init(i,tm,u);
						q.push(ent ++);
						exist[tm] = true;
					}
				}
			}
			if(bans)
			{
				break;
			}
		}

		if(!bans)
		{
			puts("-1");
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值