被幸福包裹的数

题意

思路

当时怎么怎么样,题目思路是啥,需要注意哪些地方,哪里犯错了

代码

#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;
} 
posted @ 2023-02-16 16:54  董老师123  阅读(157)  评论(0)    收藏  举报