#include <stdio.h>
int N;
typedef struct Node{
char num[32];
int mod;
}Node;
Node queue[1000000];
int visited[1000001];
char *str = "012";
int head, tail;
int strLen(char *str){
char *p = str;
while (*p != '\0')
p++;
return p - str;
}
void strCpy(char *to, char *from){
while (*from != '\0'){
*to = *from;
from++;
to++;
}
*to = '\0';
}
int main(){
scanf("%d", &N);
head = tail = 0;
Node nodePushed;
nodePushed.num[0] = '\0';
nodePushed.mod = 0;
queue[tail++] = nodePushed;
while (head < tail){
Node nodePoped = queue[head++];
int len = strLen(nodePoped.num);
if (len > 30)
break;
int i;
for (i = 1; i <= 2; i++){
int mod;
mod = (nodePoped.mod * 10 + i) % N;
if (visited[mod])
continue;
//为什么这样做标记可以剪枝?
visited[mod] = 1;
char num[32];
strCpy(num, nodePoped.num);
num[len] = str[i];
num[len + 1] = '\0';
if (mod == 0){
printf("%s\n", num);
return 0;
}
Node nodePushed;
strCpy(nodePushed.num, num);
nodePushed.mod = mod;
queue[tail++] = nodePushed;
if (head > tail)
printf("The queue is overflow\n");
}
}
printf("Impossible\n");
return 0;
}
URAL 1495 One-two, One-two 2 (BFS)
最新推荐文章于 2018-04-18 22:25:00 发布