dfs打访没访问过的标记时,要记得起点(初始点)也得标记
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
bool vis[4][4];
int res;
int move_hang[4]={-1,0,1,0},move_lie[4]={0,1,0,-1};
bool dfs(int x,int y,int index){
if(index==16){
res++;
return true;
}
for(int i=0;i<4;i++){
int xx=x+move_hang[i];
int yy=y+move_lie[i];
if(xx<0||yy<0||xx>=4||yy>=4) continue;
if(vis[xx][yy]) continue;
vis[xx][yy]=true;
dfs(xx,yy,index+1);
vis[xx][yy]=false;
}
return false;
}
void solve(){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
memset(vis,false,sizeof(vis));
//不要忘了第一个点,即起点也要标记
vis[i][j]=true;
dfs(i,j,1);
}
}
cout<<res;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}