整数数组跳跃

数组移动跳跃

http://www.nowcoder.com/questionTerminal/3f99492e23d9403d923e44bb1061cc86

1.难点整数数组的输入
2.跳到一个点,将其标为0,意思就是如果从这个点跳出去,经过一段距离后又回来了,说明陷入了循环,
或者本身就是0,直接停在原地
3.这样判断的时候就只需要判断(==0) 就返回false

#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

bool dfs(vector<int> &nums){

    int n = nums.size();
    int i = 0;
    while(i>=0 && i<n){
        if(nums[i]==0) return false;
        int old = i;
        i += nums[i];
        nums[old] = 0;// 
    }
    return true;
}



int main(){
    string line;
    while(getline(cin, line)){
        line = line.substr(1, line.size()-2);
        istringstream strin(line);
        int x; 
        char sep; 
        vector<int> nums;
        while(strin>>x){
            nums.push_back(x);
            if(strin>>sep) ;
            else break;
        }

        bool ans = dfs(nums);
        if(ans) cout<<"true"<<endl;
        else cout<<"false"<<endl;
    }
    return 0;
}
全部评论

相关推荐

陌夏微秋:一线城市25w左右吧,17×15=255
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务