URAL 1495 One-two, One-two 2 (BFS)

来源:互联网 发布:联通云计算公司工资 编辑:程序博客网 时间:2024/06/01 08:17
#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;}

0 0
原创粉丝点击