题意:给你一个数轴,从0开始出发,只能通过传送站转移,然后问能否通过给定的传送站转移到终点
传送站给出坐标,以及其能够移动的范围
思路:我们可以想到dfs来搜索路径。由于每个传送站可以进行转移,即记录站点位置(转移时只能这样),然后再
用vis记录是否访问(避免重复),到达终点标记为成功
记录上由于范围较小所以直接用下标表示位置
刚开始WA了一发,然后就怀疑输入有坑,估计是某个点的范围被一直改变。所以后面就记录pos更大时才修改
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; int vis[150]; int pos[150]; int n,m; int flag; void dfs(int p){ vis[p] = 1; if(p==m) {flag = 1; return;} for(int i=p+1;i<=pos[p];i++){ if(i>m||vis[i]||!pos[i]) continue;//超出边界,已被访问,没有传送点 dfs(i); } } int main(){ while(cin>>n>>m){ int tmp,tmp1; memset(pos,0,sizeof(pos)); for(int i = 0;i<n;i++){ cin>>tmp; cin>>tmp1; if(tmp1>pos[tmp]) pos[tmp] = tmp1; } pos[m] = 1; memset(vis,0,sizeof(vis)); flag = 0; dfs(0); if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } }