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 ; 
}
相关文章
【力扣每日一题/30】463. 岛屿的周长
【力扣每日一题/30】463. 岛屿的周长
【力扣每日一题/30】463. 岛屿的周长
【剑指offer】-矩形覆盖-10/67
【剑指offer】-矩形覆盖-10/67
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
lanqiao OJ 803 方格取数
lanqiao OJ 803 方格取数
lanqiao OJ 644 方格分割
lanqiao OJ 644 方格分割
lanqiao OJ 689 四阶幻方
lanqiao OJ 689 四阶幻方
|
4月前
|
存储 算法 数据可视化
LeetCode 题目 120:三角形最小路径和
LeetCode 题目 120:三角形最小路径和
【LeetCode-每日一题】-120. 三角形最小路径和
【LeetCode-每日一题】-120. 三角形最小路径和