lanqiao OJ 664 方格填数

简介: lanqiao OJ 664 方格填数

1.方格填数 - 蓝桥云课 (lanqiao.cn)

dfs全排列,每次填一个数就判断一下,他的左,左上,上,右上符不符合条件,

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 500;
int mp[10][10] ;
int cnt ;
int v[N] ;
int d[4][2] = {{0,-1},{-1,0},{-1,-1},{-1,1}} ;
bool check(int x, int y){//检查一下四个方向的数是否合法
  bool flag = 1 ;
  int a = mp[x][y] ;
  for(int i =0 ; i < 4 ; i ++){
    int tx = x + d[i][0] , ty = y + d[i][1] ;
    if(tx < 0 || tx >= 3 || ty < 0 || ty >= 4) continue ;
    int b = mp[tx][ty] ;
    if(b == a-1 || b == a+1) flag = 0 ;
  }
  return flag ;
}
 
void dfs(int u){
  if(u == 11){
    cnt ++ ;
    return ;
  }
  for(int i = 0 ; i < 10 ; i ++){//全排列
    if(!v[i]){
      mp[u/4][u%4] = i ;
      if(!check(u/4,u%4)) continue ;
      v[i] = 1 ;
      dfs(u+1) ;
      v[i] = 0 ;
    }
  }
}
 
int main(){
  mp[0][0] = N ;
  mp[2][3] = N ;
  for(int i = 0 ; i < 4 ; i ++) {
    mp[3][i] = N , mp[i][4] = N ;
  }
  
  dfs(1) ;
  cout << cnt << endl ;
  return 0 ; 
}
目录
相关文章
|
3天前
lanqiao OJ 689 四阶幻方
lanqiao OJ 689 四阶幻方
10 0
|
3天前
lanqiao OJ 1505 剪邮票
lanqiao OJ 1505 剪邮票
10 0
|
3天前
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
18 6
|
3天前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
9 2
|
3天前
lanqiao OJ 644 方格分割
lanqiao OJ 644 方格分割
9 1
|
3天前
lanqiao OJ 803 方格取数
lanqiao OJ 803 方格取数
13 3
|
3天前
acwing 898 数字三角形
acwing 898 数字三角形
13 2
|
3天前
lanqiao OJ 649 算式900
lanqiao OJ 649 算式900
10 1
|
1天前
lanqiao oj 186 糖果(状态压缩dp)
lanqiao oj 186 糖果(状态压缩dp)
5 0
|
3天前
lanqiao OJ 641 迷宫
lanqiao OJ 641 迷宫
10 0