解题思路:用STL的next_permutation枚举全排列,题目给定的数组,不为0的位置要判断是否相同,如果都相同的情况下再判断行、列、对角线是否相同
#include<bits/stdc++.h>
#define x first
#define y second
#define mem(h) memset(h,-1,sizeof h)
#define mcp(a,b) memcpy(a,b,sizeof b)
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int>PII;
typedef pair<double,double>PDD;
namespace IO{
inline LL read(){
LL o=0,f=1;char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){
o=o*10+c-'0';c=getchar();}
return o*f;
}
}using namespace IO;
const int N=1e2+7,M=2e5+7,INF=0x3f3f3f3f,mod=1e8+7,P=131;
int a[9],b[9]={
1,2,3,4,5,6,7,8,9};
bool check1(){
for(int i=0;i<9;i++){
if(a[i]==0)continue;
if(a[i]!=b[i])return false;
}
return true;
}
bool check2(){
int k=b[0]+b[1]+b[2];
if(b[3]+b[4]+b[5]!=k)return false;
if(b[6]+b[7]+b[8]!=k)return false;
if(b[0]+b[3]+b[6]!=k)return false;
if(b[1]+b[4]+b[7]!=k)return false;
if(b[2]+b[5]+b[8]!=k)return false;
if(b[0]+b[4]+b[8]!=k)return false;
if(b[2]+b[4]+b[6]!=k)return false;
return true;
}
int main(){
for(int i=0;i<9;i++)cin>>a[i];
do{
if(check1()){
if(check2()){
for(int i=0;i<9;i++){
cout<<b[i]<<" ";
if((i+1)%3==0)cout<<endl;
}
return 0;
}
}
}while(next_permutation(b,b+9));
cout<<"Too Many"<<endl;
return 0;
}