本帖最后由 FreddyMusic 于 2010-4-7 12:42 编辑
- myrule1=x[i_,j_]:>ToExpression[ToString[x]<>If[i<=9,ToString[0]<>ToString[i],ToString[i]]<>If[j<=9,ToString[0]<>ToString[j],ToString[j]]];
- myrule2=x_[i_]:>ToExpression[ToString[x]<>If[i<=9,ToString[0]<>ToString[i],ToString[i]]];
- y[i_]:=Total@Table[j*x[i,j],{j,0,15}]/.myrule1;
- cond1=Flatten[{Thread[Flatten@{Total@Partition[Table[y[i],{i,0,15}],4],Total@Transpose@Partition[Table[y[i],{i,0,15}],4],y[0]+y[5]+y[10]+y[15],y[3]+y[6]+y[9]+y[12]}==Table[30,{10}]],Thread[Flatten@{Total@Table[x[i,j],{i,0,15},{j,0,15}],Total@Transpose@Table[x[i,j],{i,0,15},{j,0,15}]}==
- Table[1,{32}]]/.myrule1}];
- var=Flatten@Table[Table[x[i,j],{j,0,15}],{i,0,15}]/.myrule1;
- {b,m}=Normal[CoefficientArrays[cond1,var]];
- ans=LinearProgramming[Range[0,255],m,Table[{-b[[i]],0},{i,Length@b}],Table[0,{i,256}],Integers]
- Grid@Partition[Partition[ans,16].Range[0,15],4]
复制代码 {{12, 7, 8, 3}, {2, 13, 6, 9}, {5, 10, 1, 14}, {11, 0, 15, 4}} |