hdu 4474 bfs
2015-09-16 11:43
253 查看
和上一题大同小异,经过思考,visit数组可以省去第一维。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 10007; const int M = 10; int n, m, head, tail; bool visit ; bool digit[M]; struct Node { int d, r, pre; Node(){} Node( int _d, int _r, int _pre ) { d = _d, r = _r, pre = _pre; } } q ; void dfs( int x ) { if ( x == -1 ) return ; dfs( q[x].pre ); printf("%d", q[x].d); } void bfs() { memset( visit, 0, sizeof(visit) ); head = tail = 0; for ( int i = 1; i < M; i++ ) { if ( !digit[i] && !visit[i % n] ) { q[tail++] = Node( i, i % n, -1 ); visit[i % n] = 1; } } while ( head < tail ) { if ( q[head].r == 0 ) { dfs(head); putchar('\n'); return ; } for ( int k = 0; k < M; k++ ) { if ( digit[k] ) continue; int rr = ( q[head].r * 10 + k ) % n; if ( !visit[rr] ) { q[tail++] = Node( k, rr, head ); visit[rr] = 1; } } head++; } printf("-1\n"); } int main () { int _case = 1; while ( scanf("%d%d", &n, &m) != EOF ) { memset( digit, 0, sizeof(digit) ); while ( m-- ) { int tmp; scanf("%d", &tmp); digit[tmp] = 1; } printf("Case %d: ", _case++); bfs(); } return 0; }
相关文章推荐
- 动物精神【经济学人】
- PrintTextToBroswer处理乱码
- MongoDB学习日记 - java代码(四):构建Document
- telnet install in centos 6
- redis 命令
- 页面布局Table和Div哪个更好
- 权限(二)--权限的控制(过滤器与自定义标签)
- Android SDK在线更新镜像服务器
- Hibernate执行原生sql将查询结果直接转为VO
- quartz cron表达式介绍
- ruby 使用gem安装换source
- Android framework系统默认设置修改
- VS2005格式化代码
- HDOJ-1521排列组合(指数型母函数)
- git 多个账号使用
- 名称空间也可以自定义
- frameset,iframe框架之间如何互相调用变量、函数
- FisrtWebApp
- 15-1系统裁剪 为服务加后缀
- FingerGestures研究院之初探Unity手势操作(一)