CF453-A Visiting a Friend (dfs)

题意:给你一个数轴,从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;
    }
}
原文地址:https://www.cnblogs.com/Tianwell/p/11327552.html