#include"iostream"
#include"string"
#include"vector"
#include"algorithm"
using namespace std ;
// 问题如下:
// 枚举 1~9 之间的幻方
class Solution{
public :
Solution()
{
int a[3][3]={0};
vector<int> v;
v.reserve(10);
init(v);
// 枚举每一种方案
do{
fun(a,v);
}while(next_permutation(v.begin(),v.end()));
}
void permu(vector<int> &v,int i)
{
int temp;
temp=v[0];
v[0]=v[i];
v[i]=temp;
}
void init(vector<int> &v)
{
for(int i=1;i<10;i++)
{
v.push_back(i);
}
}
void printV(vector<int> &v)
{
for(vector<int>::iterator it=v.begin();it<v.end();it++)
{
cout<<*it<<'\t';
}
cout<<endl;
}
// 枚举出a[0][0] ,a[0][1],a[0][2]
void fun(int a[3][3],vector<int> v)
{
for(int i=0;i<v.size();i++)
{
for(int j=i+1;j<v.size();j++)
{
for(int k=j+1;k<v.size();k++)
{
if(v.at(i)+ v.at(j)+v.at(k)==15)
{
a[0][0]=v.at(i);
a[0][1]=v.at(j);
a[0][2]=v.at(k);
vector<int>v2=v;
v2.erase(v2.begin()+k);
v2.erase(v2.begin()+j);
v2.erase(v2.begin()+i);
// 枚举出a[1][0] ,a[2][0]
fun2(a,v2);
}
}
}
}
}
// 枚举出a[1][0] ,a[2][0]
void fun2(int a[3][3],vector<int> v)
{
for(int i=0;i<v.size();i++)
{
for(int j=i+1;j<v.size();j++)
{
if(a[0][0]+v.at(i)+v.at(j)==15)
{
a[1][0]=v.at(i);
a[2][0]=v.at(j);
vector<int> v2=v;
v2.erase(v2.begin()+j);
v2.erase(v2.begin()+i);
// printV(v2);
// 枚举出a[1][1] ,a[2][2]
fun3(a,v2);
}
}
}
}
// 枚举出a[1][1] ,a[2][2]
void fun3(int a[3][3],vector<int> v)
{
for(int i=0;i<v.size();i++)
{
for(int j=i+1;j<v.size();j++)
{
if(a[0][0]+v.at(i)+v.at(j)==15)
{
a[1][1]=v.at(i);
a[2][2]=v.at(j);
vector<int> v2=v;
v2.erase(v2.begin()+j);
v2.erase(v2.begin()+i);
// 枚举出a[1][2]
fun4(a,v2);
}
}
}
}
void fun4(int a[3][3],vector<int> v)
{
for(int i=0;i<v.size();i++)
{
if(a[0][2]+a[2][2]+v.at(i)==15)
{
vector<int>v2=v;
a[1][2]=v.at(i);
v2.erase(v2.begin()+i);
// 枚举出a[2][1]
fun5(a,v2);
}
}
}
void fun5(int a[3][3],vector<int> v)
{
for(int i=0;i<v.size();i++)
{
if(a[2][0]+a[2][2]+v.at(i)==15)
{
a[2][1]=v.at(i);
// 输出幻方
printMatrix(a);
cout<<endl;
}
}
}
void printMatrix(int a[3][3])
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<a[i][j]<<'\t';
}
cout<<endl;
}
}
};
int main()
{
Solution slt;
}
C++ 列举数值范围在1~9之间的三阶幻方
最新推荐文章于 2024-07-11 10:46:38 发布