欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

九宫格

程序员文章站 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;
}
				

 不知道有没有求出所有解法,欢迎指教。