-
-
hblac.cpp
-
发表于: 2010-10-20 15:59 4125
-
#include <stdio.h>
bool use[17]={0};
int grid[5][5]={0};
int count=0;
bool suit(int row,int col,int value)
{
int i;
if(row==4)
{
if(grid[1][col]+grid[2][col]+grid[3][col]+value!=34)
return false;
if(col==1)
if(grid[1][4]+grid[2][3]+grid[3][2]+value!=34)
return false;
int sum=0;
for(i=1;i<col;i++)
sum+=grid[row][i];
sum+=value;
if(sum>34) return false;
}
if(col==4)
{
if(grid[row][1]+grid[row][2]+grid[row][3]+value!=34)
return false;
if(row==4)
if(grid[1][1]+grid[2][2]+grid[3][3]+value!=34)
return false;
int sum=0;
for(i=1;i<row;i++)
sum+=grid[i][col];
sum+=value;
if(sum>34) return false;
}
int sum=0;
for(i=1;i<row;i++)
sum+=grid[i][col];
sum+=value;
if(sum>34) return false;
sum=0;
for(i=1;i<col;i++)
sum+=grid[row][i];
sum+=value;
if(sum>34) return false;
return true;
}
int search(int row,int col)
{
int i,j;
if(row==4&&col==4)
{
for(i=1;i<=16;i++)
if(!use[i]) break;
if(suit(4,4,i))
{
count++;
grid[4][4]=i;
printf("Case %d\n",count);
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(j==4) printf("%d\n",grid[i][j]);
else printf("%d ",grid[i][j]);
printf("\n");
}
return 0;
}
for(i=1;i<=16;i++)
if(!use[i])
{
if(suit(row,col,i))
{
use[i]=1;
grid[row][col]=i;
if(col==4) search(row+1,1);
else search(row,col+1);
use[i]=0;
grid[row][col]=0;
}
}
return 0;
}
int main()
{
search(1,1);
return 0;
}
赞赏
赞赏
雪币:
留言: