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 ; 
}
目录
相关文章
|
12月前
lanqiao OJ 106 正则问题
lanqiao OJ 106 正则问题
63 0
|
12月前
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
92 6
|
12月前
lanqiaoOJ 563 采药
lanqiaoOJ 563 采药
64 6
|
12月前
acwing 898 数字三角形
acwing 898 数字三角形
70 2
|
12月前
lanqiao OJ 239 最优包含
lanqiao OJ 239 最优包含
55 2
|
12月前
对二分的理解
对二分的理解
75 2
|
12月前
lanqiao OJ 230 调手表
lanqiao OJ 230 调手表
86 1
|
12月前
lanqiao OJ 89 路径之谜
lanqiao OJ 89 路径之谜
68 1
|
12月前
lanqiaoOJ 2114 李白打酒加强版
lanqiaoOJ 2114 李白打酒加强版
53 1
|
12月前
lanqiao oj 奇怪的段
lanqiao oj 奇怪的段
43 0