题意:求第n个各位不重复的数。

题解:以1,2...9作为初始结点,bfs依次从0到9加入其它的数,条件是这个数未在结点中出现过。

View Code
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 struct data
 6 {
 7     int v,s;
 8     data(){}
 9     data(int _v,int _s){v=_v,s=_s;}
10 }po[1001000];
11 int main()
12 {
13     int f,r;
14     f=1;
15     for(r=1;r<10;r++)
16         po[r]=data(r,1<<r);
17     while(r<=1000000)
18     {
19         int v=po[f].v,s=po[f].s;
20         f++;
21         for(int i=0;i<10;i++)
22             if(!(s&(1<<i)))
23                 po[r++]=data(v*10+i,s|(1<<i));
24     }
25     int n;
26     while(scanf("%d",&n),n)
27     {
28         printf("%d\n",po[n].v);
29     }
30     return 0;
31 }