POJ 1426 congruencia + Bfs

Una mirada que no es el problema, oh mi rugido. . . . Encontrar una solución a un problema en silencio
encontrado una fórmula mágica:
si m% n = r
es (m * 10 + y)% n == (r * 10 + y)% n
no lo encontrado? Es decir, cuando se agrega un manojo entero de que no tienen una re-adición! ! ! Sin embargo, para utilizar el resto! ! ! Y la precisión se puede decir con seguridad adiós ligeramente bueno
Otro punto a destacar, ya que el resto no se molestan en ir de nuevo ligeramente tan pequeña marca en
BFS rutinas:
1. Inicializar algo, arrojados a la cola
2. La cola está vacía juez
{
tiro fuera de una. . . .
3. La condición juicio final;
4. caminar dirección
5. Analizar el rango
{
factible arrojado. . .
}
}
Código es el siguiente

#include <iostream> 
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <string>
using namespace std;
struct stu{
	string s;
	int left;
};

void bfs (  int n )
{
	int f[205]={0};//表示试过的余数 
	stu be,nex,kk;
	be.s  = "1";
	be.left = 1%n;  f[1%n] = 1; //第一步初始化 
	queue < stu > q;
	q.push(be);
	while ( !q.empty())
	{
		be = q.front();
		q.pop();
		if( be.left == 0) // 末条件 
		{
			cout<<be.s<<endl;
			break;
		 } 
		//1
		nex.s = be.s + "1";
		nex.left = (be.left*10+1) % n;
		if ( !f[nex.left] )
		{
			f[nex.left] = 1;
			q.push(nex);
		 }
		//0
		nex.s = be.s + "0";
		nex.left = (be.left*10+0) % n;
		if ( !f[nex.left] )
		{
			f[nex.left] = 1;
			q.push(nex);
		 } 
		
	 } 
	
}
int main()
{
	int n;
	while ( ~scanf("%d",&n) && n)
	{
		bfs(n);
	}
	return 0;
}
 
Publicado 55 artículos originales · ganado elogios 1 · vistas 2633

Supongo que te gusta

Origin blog.csdn.net/qq_37548017/article/details/105385986
Recomendado
Clasificación