答案:552
标准的DFS模板题,有一说一作为国赛填空题最后一题有点水。。。
#include <cstdio>
int res = 0;
bool vis[5][5] = {false};
int X[4] = {0,0,1,-1};
int Y[4] = {1,-1,0,0};
bool legal(int x, int y){
if(vis[x][y] == true) return false;
if(x<1 || x>4 || y<1 || y>4) return false;
return true;
}
void dfs(int x, int y, int sum){
if(sum == 16){
res++;
return;
}
for(int i=0; i<4; i++){
int tempX = x + X[i];
int tempY = y + Y[i];
if(legal(tempX,tempY)){
vis[tempX][tempY] = true;
dfs(tempX,tempY,sum+1);
vis[tempX][tempY] = false;
}
}
}
int main(){
for(int i=1; i<=4; i++){
for(int j=1; j<=4; j++){
vis[i][j] = true;
dfs(i,j,1);
vis[i][j] = false;
}
}
printf("%d", res);
return 0;
}