POJ 2956

题意:求第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 }

你可能感兴趣的:(poj)