// Generate random permutation of n integers. // After http://cap-lore.com/code/ocaml/misc.ml #include void rp(int n, int ans[n]){ int ra[n]; {int j=n; while(j--) ra[j]=j;} {int i=n; while(i--){ int f = random()%(i+1); ans[i] = ra[f]; ra[f] = ra[i];}}} // Demo: #include int main(){ if(1){int a[10]; int j=10; while(j--){ rp(10, a); for(int y=0; y<10; ++y) printf(" %d", a[y]); printf("\n");}} else {int a[16]; int h[16][16]; {int u=16; while(u--) {int v=16; while(v--) h[u][v]=0;}} int y = 10000000; while (y--) {rp(16, a); {int j=16; while(j--) ++h[a[j]][j];}} for(int j=0; j<16; ++j) {for(int k=0; k<16; ++k) printf("%d ", h[j][k]); printf("\n");}} return 0;}