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;
}
目录
相关文章
|
3天前
lanqiao OJ 1030 蓝肽子序列
lanqiao OJ 1030 蓝肽子序列
13 2
|
3天前
lanqiao OJ 1388 寒假作业
lanqiao OJ 1388 寒假作业
15 0
|
3天前
lanqiao OJ 1505 剪邮票
lanqiao OJ 1505 剪邮票
11 0
|
3天前
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
18 6
|
3天前
lanqiao OJ 649 算式900
lanqiao OJ 649 算式900
10 1
|
3天前
lanqiao OJ 389 摆花
lanqiao OJ 389 摆花
8 2
|
3天前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
9 2
|
3天前
lanqiao OJ 664 方格填数
lanqiao OJ 664 方格填数
6 1
|
3天前
lanqiao OJ 108 发现环
lanqiao OJ 108 发现环
8 1
|
1天前
lanqiao oj 1050 补给
lanqiao oj 1050 补给
8 0