蒟蒻BFS代码模块化清晰易懂悬关求条
查看原帖
蒟蒻BFS代码模块化清晰易懂悬关求条
781241
Turtle_Coffee楼主2025/1/21 16:19
#include<iostream>
#include<string>
#include<queue>
using namespace std;
int ans;
struct node
{
	string num;
	int k;
};
queue <node> q;
int stringToInt(string s)
{
	int num=0;
	for(int i=0;i<s.size();i++)
		num = num*10+(s[i]-'0');
	return num;
}
bool isPrime(int num)
{
	for(int i=2;i*i<=num;i++)
		if(num%i==0)
			return false;
	return true;
}
bool check(int date)
{
	int ymd = date;
	int md  = date%10000;
	int d   = date%100;
	if(isPrime(ymd) && isPrime(md) && isPrime(d))
		return true;
	return false;
}
void bfs()
{
	while(!q.empty())
	{
		node front = q.front();
		q.pop();
		if(front.k == 7)
		{
			int date = stringToInt(front.num);
			if(check(date))
				ans++;
		}
		if(front.num[front.k]!='-')
			continue;
		for(int i=0;i<=9;i++)
		{
			string s;
			for(int j=0;j<front.num.size();j++){
				if(j==front.k) s += (char)(i+'0');
				else s += front.num[j];
			}
			node now = {s,front.k+1};
			q.push(now);
		}
	}
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		string s;
		cin>>s;
		node head = {s,0};
		q.push(head);
		bfs();
		cout<<ans<<endl;
		ans = 0;
		while(!q.empty()) q.pop();
	}
}
2025/1/21 16:19
加载中...