答案:1580
#include <cstdio>
#include <cmath>
int ans = 0;
int G[5][5];
int X[8] = {1,-1,0,0,-1,-1,1,1};
int Y[8] = {0,0,1,-1,-1,1,-1,1};
bool vis[10] = {false};
bool flag(int x, int y){
if(x==0 && y==0) return false;
if(x==2 && y==3) return false;
if(x<0 || x>=3 || y<0 || y>=4) return false;
return true;
}
void solve(){
bool book = true;
for(int x=0; x<3; x++){
for(int y=0; y<4; y++){
if(flag(x,y)){
for(int i=0; i<8; i++){
int tempX = x + X[i];
int tempY = y + Y[i];
if(flag(tempX,tempY)){
if(abs(G[tempX][tempY]-G[x][y])==1){
book = false;
}
}
}
}
}
}
if(book) ans++;
}
void dfs(int index){
int x = index / 4;
int y = index % 4;
if(x==3){
solve();
return;
}
if(flag(x,y)){
for(int i=0; i<=9; i++){
if(!vis[i]){
G[x][y] = i;
vis[i] = true;
dfs(index+1);
vis[i] = false;
}
}
}else{
dfs(index+1);
}
}
int main(){
dfs(0);
printf("%d", ans);
return 0;
}