lanqiao OJ 689 四阶幻方

简介: lanqiao OJ 689 四阶幻方

1.四阶幻方 - 蓝桥云课 (lanqiao.cn)

dfs,排序

剪枝:这个题和前面有一道寒假作业的差不多,对每一行进行判断一下是否符合条件

#include<iostream>
#include<cstring>
 
using namespace std ;
int cnt ;
int m[5][5] ; 
bool v[20] ;
bool check(){
  bool flag = 1 ;
  for(int i = 0 ; i < 4 ; i ++){
    if(m[i][0]+m[i][1]+m[i][2]+m[i][3] != 34) flag = 0;
    if(m[0][i]+m[1][i]+m[2][i]+m[3][i] != 34) flag = 0 ;
  }
  if(m[0][0]+m[1][1]+m[2][2]+m[3][3] != 34) flag = 0 ;
  if(m[3][0]+m[2][1]+m[1][2] +m[0][3] != 34) flag = 0 ;
  return flag ;
}
 
 
void dfs(int u){
  if(u==16){
    if(check()) cnt ++ ;
    return ;
  }
    //每一次填满新的一行,都检查一下这一行有没有满足条件,如果不满足就返回
  if(u%4 == 0)if(m[u/4-1][0]+m[u/4-1][1]+m[u/4-1][2]+m[u/4-1][3] != 34) return ;
  for(int i = 2 ; i <= 16 ; i ++){
    if(!v[i]){
      m[u/4][u%4] = i;
      v[i] = 1 ; 
      dfs(u+1) ;
      v[i] = 0;
    }
  }
}
 
 
int main(){
  m[0][0] = 1 ;
  dfs(1);
  cout << cnt << endl ;
  return 0;
}
相关文章
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
lanqiao OJ 649 算式900
lanqiao OJ 649 算式900
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 664 方格填数
lanqiao OJ 664 方格填数
lanqiao OJ 1030 蓝肽子序列
lanqiao OJ 1030 蓝肽子序列
lanqiao OJ 108 发现环
lanqiao OJ 108 发现环
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
lanqiao OJ 644 方格分割
lanqiao OJ 644 方格分割