//头文件
//杨氏矩阵,1~9填入3*3矩阵,由左向右递减,由上向下递减。
#include<iostream>
using namespace std;
class grid
{
public:
void outputjz(); //输出矩阵
void arrange(); //求解并输出
grid() //构造函数
{
arrange();
}
private:
int board[3][3];
void outputRowBoard() //输出格线行
{
int i;
cout<<"+";
for(i=0;i<5;i++)
cout<<"-";
cout<<"+"<<endl;
}
void outputRowBoard(int i)//输出数据行
{
int j;
for(j=0;j<3;j++)
cout <<"|"<<board[i][j];
cout<<"|";
}
void dataInit() //初始化数据
{
int i,j,k;
for(i=0,k=1;i<3;i++)
for(j=0;j<3;j++,k++)
board[i][j]=k;
}
bool dataEnd() //数据结束检测
{
int i,j,k;
for(i=0,k=9;i<3;i++)
for(j=0;j<3;j++,k--)
if(board[i][j]!=k)
return false;
return true;
}
void dataNext() //取下个数据
{
int i,j;
for(i=2;i>=0;i--)
for(j=2;j>=0;j--)
if(board[i][j]=9)
board[i][j]=1;
else
{
board[i][j]++;
return;
}
}
bool dataDifferent() //数据重复检测
{
int i,j;
int digit[10];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
digit[board[i][j]]=1;
for(i=1,j=0;i<10;i++)
j+=digit[i];
if(j==9)
return true;
return false;
}
bool dataFirst() //检测首位条件是否符合
{
if(board[0][0]!=9)
return false;
return true;
}
bool dataLast() //检测最后位条件是否符合
{
if(board[2][2]!=1)
return false;
return true;
}
bool dataRow() //检测行条件是否符合
{
int i,j,k,x;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
k=board[i][j];
x=board[i+1][j];
}
if(x>k)
return false;
}
return true;
}
bool dataColumn() //检测列条件是否符合
{
int i,j,k,x;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
k=board[i][j];
x=board[i][j+1];
}
if(x>k)
return false;
}
return true;
}
bool dataCheck()
{
if(!dataDifferent())
return false;
if(!dataFirst())
return false;
if(!dataLast())
return false;
if(!dataRow())
return false;
if(!dataColumn())
return false;
return true;
}
};
void grid::outputjz()
{
int i;
outputRowBoard();
for(i=0;i<3;i++)
{
outputRowBoard(i);
outputRowBoard();
}
}
void grid::arrange()
{
int n=1;
for(dataInit();!dataEnd();dataNext())
{
if(dataCheck())
{
cout <<"第"<<n<<"个结果:"<<endl;
n++;
outputjz();
}
}
}
//cpp文件
//讲1~9填入3*3杨氏矩阵中,输出所有可能结果。
#include<iostream>
using namespace std;
#include"young.h"
int main()
{
grid a();
}
//运行以后没有输出的,只有一个
//“请按任意键继续。。。”