九宫格
程序员文章站
2022-06-14 13:30:21
...
写了一个利用穷举求九宫格的算法,本来是要求三横三竖两对角线,共计八线和都要满足15,但是在if语句之前我们就可以判断除四周之外的其他和,大大的减少其遍历次数。
#include<iostream>
using namespace std;
int check(int a[10])
{
if(15!=(a[1]+a[2]+a[3])||15!=(a[1]+a[4]+a[7])||15!=(a[9]+a[6]+a[3])||15!=(a[9]+a[8]+a[7]))
return 0;
return 1;
}
void print(int a[10])
{
for(int i=1;i<10;i++)
{
cout<<a[i]<<" ";
if(i%3==0)
cout<<endl;
}
cout<<endl;
}
int main()
{
int a[10],count=0,b[10];
for(int i=1;i<10;i++)
for(int j=1;j<10;j++)
if(j!=i&&j!=(10-i)){
for(int k=1;k<10;k++)
if(k!=i&&k!=(10-i)&&k!=j&&k!=(10-j)){
for(int s=0;s<10;s++)
b[s]=-1;
b[5]=1;
a[5]=5;
a[1]=i;a[9]=10-i;b[i]=b[10-i]=1;
a[2]=j;a[8]=10-j;b[j]=b[10-j]=1;
a[3]=k;a[7]=10-k;b[k]=b[10-k]=1;
for(int t=1;t<10;t++)
if(b[t]==-1)
{ a[4]=t;
break;
}
a[6]=10-a[4];
if(check(a))
{
cout<<"the "<<++count<<' '<<"solution"<<endl;
print(a);
}
}
}
return 0;
}
不知道有没有求出所有解法,欢迎指教。