hdu 4474
来源:互联网 发布:淘宝装修拓展编码大全 编辑:程序博客网 时间:2024/06/05 03:34
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4474
思路:bfs,用pre[]来记录到达u的前一个结点,num[]来保存当前数的最后一位。
具体见代码:
View Code
1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 const int N=10010; 5 using namespace std; 6 int n,m; 7 int a[10]; 8 int pre[N],num[N]; 9 10 void print(int u){11 if(pre[u]!=-1)print(pre[u]);//pre[]保存的是形成u的前一个结点,直到为-1;12 printf("%d",num[u]);//由于num[]保存的记录u的最后一个数字,应此应该逆序输出13 }14 15 void bfs(){16 queue<int>Q;17 for(int i=1;i<=9;i++)if(!a[i]){18 int t=i%n;19 if(t==0){20 printf("%d",i);21 return ;22 }23 Q.push(t);24 num[t]=i;25 }26 while(!Q.empty()){27 int u=Q.front();28 Q.pop();29 for(int i=0;i<=9;i++)if(!a[i]){30 int t=(u*10+i)%n;31 if(num[t]==-1){32 Q.push(t);33 pre[t]=u;//由于记录到达t的前一个结点u;34 num[t]=i;//记录形成t的最后一位数字35 }36 if(t==0){37 print(t);38 return ;39 }40 }41 }42 printf("-1");43 }44 45 46 int main(){47 int _case=1;48 while(~scanf("%d%d",&n,&m)){49 memset(a,0,sizeof(a));50 memset(pre,-1,sizeof(pre));51 memset(num,-1,sizeof(num));52 int x;53 while(m--){54 scanf("%d",&x);55 a[x]=1;56 }57 printf("Case %d: ",_case++);58 bfs();59 printf("\n");60 }61 return 0;62 }
0 0
- hdu 4474
- hdu 4474
- HDU-4474
- HDU 4474
- HDU 4474
- HDU 4474 BFS
- hdu 4474 数位搜索
- hdu 4474 搜索bfs
- hdu 4474 bfs
- hdu 4474 数位BFS
- hdu 4474 dfs+减枝
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- hdu 4514(并查集判环)
- hdu 2189
- hdu 1133(卡特兰数)
- hdu 4517
- hdu 4472
- hdu 4474
- hdu 4520+hdu 4522+hdu 4524(3月24号Tencent)
- hdu 1023
- dp学习笔记1
- dp学习笔记2
- hdu 1025(最长非递减子序列的n*log(n)求法)
- 政治局常委:不能用形式主义反对形式主义
- dp学习笔记3
- hdu 1158(很好的一道dp题)