题意:求第n个各位不重复的数。
题解:以1,2...9作为初始结点,bfs依次从0到9加入其它的数,条件是这个数未在结点中出现过。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }