被幸福包裹的数
题意

思路
当时怎么怎么样,题目思路是啥,需要注意哪些地方,哪里犯错了
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 15;
int n,vis[N],ans;
struct node{
int x,y;
}a[N];
bool check(){
for(int i = 1; i <= n; i ++ ){
if(!vis[i]) return false;
}
return true;
}
int get_dir(int sx,int sy,int ex,int ey){
if(sx > ex) return 1;
if(sx < ex) return 2;
if(sy < ey) return 3;
return 4;
}
//坐标 到达这个坐标时来的方向
void dfs(int x,int y,int last){
//终止条件
//如果下一步就能到达终点 && 去0,0的方向不和来时的方向相同 && 此时已满足到达过所有的点了
if((x == 0 || y == 0) && get_dir(x,y,0,0) != last && check()){
ans++;
return;
}
for(int i = 1; i <= n; i ++ ){
int nxt = get_dir(x,y,a[i].x,a[i].y);
//如果下个点还没走过 && 下一步就能直达 && 去下个点的方向不和来时相同
if(!vis[i] && (x == a[i].x || y == a[i].y) && nxt != last){
vis[i] = 1;
dfs(a[i].x,a[i].y,nxt);
vis[i] = 0;
}
}
}
int main(){
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i].x >> a[i].y;
}
dfs(0,0,0);
cout << ans;
return 0;
}
浙公网安备 33010602011771号