fork download
  1. #include<stdio.h>
  2. #include<algorithm>
  3. #define N 6
  4. using namespace std;
  5.  
  6. int c[N][N];
  7. int solve(int a,int b){
  8. if(a==N){
  9. int ret=1;
  10. for(int i=0;i<N;i++)
  11. for(int j=0;j<N;j++)
  12. for(int k=0;k<N;k++)
  13. for(int l=0;l<N;l++)
  14. if(c[c[i][j]][c[k][l]]!=c[i][l])return 0;
  15. return 1;
  16. }
  17. if(b==N)return solve(a+1,0);
  18. if(a==b)return solve(a,b+1);
  19. int ret=0;
  20. for(int i=0;i<N;i++){
  21. bool ok=true;
  22. for(int j=0;j<N;j++){
  23. if(!ok)break;
  24. for(int k=0;k<N;k++){
  25. if(~c[j][k]&&~c[i][c[j][k]]&&~c[a][k]&&c[a][k]!=c[i][c[j][k]]){ok=false;break;}
  26. if(~c[j][k]&&~c[c[j][k]][i]&&~c[j][b]&&c[j][b]!=c[c[j][k]][i]){ok=false;break;}
  27. if(~c[a][j]&&~c[k][b]&&~c[c[a][j]][c[k][b]]&&i!=c[c[a][j]][c[k][b]]){ok=false;break;}
  28. }
  29. }
  30. if(ok){
  31. c[a][b]=i;
  32. ret+=solve(a,b+1);
  33. c[a][b]=-1;
  34. }
  35. }
  36. return ret;
  37. }
  38. int main(){
  39. for(int i=0;i<N;i++)
  40. for(int j=0;j<N;j++)
  41. c[i][j]=-1;
  42. for(int i=0;i<N;i++)c[i][i]=i;
  43. printf("%d\n",solve(0,0));
  44. }
Success #stdin #stdout 0.01s 3340KB
stdin
Standard input is empty
stdout
122