64,651
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
void printf4(int a[][4]) //输出
{
int br=0;
for(int i1=0;i1<4;i1++)
for(int j1=0;j1<4;j1++)
{ cout<<a[i1][j1]<<" ";
br++;
if(br%4==0)
cout<<endl;
}
}
void putin(int a[][4],int m,int n,int*row,int*how) //输入点
{
a[m][n]=1;
row[m]++;
how[n]++;
}
bool couldputin(int a[][4],int m,int n,int *row,int *how) //判断是否可以输入。
{
if((m<4)&&(n<4)&&(row[m]!=2)&&(how[n]!=2)&&(a[m][n]!=1))
return true;
else
return false;
}
void set8(int a[][4],int * row,int* how,int ip) //输入8个点,每行2个,每列2个,
{
if(ip>4)
{ printf4(a);cout<<endl;}
else
{
for(int i=0;i<3;i++)
{
if (couldputin(a,ip,i,row,how))
{ putin(a,ip,i,row,how);
for(int j=i+1;j<4;j++)
{
if (couldputin(a,ip,j,row,how))
{
putin(a,ip,j,row,how);
set8(a,row,how,ip+1);
}
}
}
}
}
}
int main()
{
int a[4][4];
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
a[i][j]=0;
int row[4]={0,0,0,0}; //行, 每行输入的个数,最多为2.
int how[4]={0,0,0,0}; //列 每列输入的个数,最多为2.
int ip=0;
set8(a,row,how,0);
printf4(a);
return 0;
}