首页
社区
课程
招聘
hblac.cpp
发表于: 2010-10-20 15:59 4011

hblac.cpp

2010-10-20 15:59
4011
#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;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//