文章

27

粉丝

0

获赞

130

访问

8.3k

头像
P1678 走路还是坐公交 答疑提问:
jsd VIP
P1678 中南大学机试题
发布于2025年2月17日 10:08
阅读数 319

求助我这个为什么会报运行时错误呀, 通过率50%

#include<bits/stdc++.h>
using namespace std;

void bfs(int s, int t, int& ans) {
    vector<int> visit(200001, 0);
    if(s == t) return;
    queue<int> q;
    q.push(s); 
    visit[s] = 1;
    q.push(-999999);
    while(!q.empty()) {
        int a = q.front();
        q.pop();
        if(a == -999999) {
            q.push(-999999);
            ans++;
            a = q.front();
            q.pop();
        }
        if(a == t) {
           &nb...

登录查看完整内容


登录后发布评论

1 条评论
admin SVIP
2025年2月17日 11:42

队列的元素反复入队有问题,另外a-1>=0,修改后代码

#include<bits/stdc++.h>
using namespace std;

void bfs(int s, int t, int& ans) {
    vector<int> visit(100001, 0);
    if(s == t) return;
    queue<int> q;
    q.push(s); 
    visit[s] = 0;
    while(!q.empty()) {
        int a = q.front();
        q.pop();
        if(a == t) {
			ans = visit[a];
            return;
        } else {
            if(a + 1 < 100001 && visit[a + 1] == 0) {
                q.push(a + 1);
                visit[a + 1] = visit[a]+1;
            } 
            if(a - 1 >= 0 && visit[a - 1] == 0) {
                q.push(a - 1);
                visit[a - 1] = visit[a]+1;
            }
            if(a * 2 < 100001 && visit[a * 2] == 0) {
                q.push(a * 2);
                visit[a * 2] = visit[a]+1;
            }
        }
    }
}

int main() {
    int s, t;
    while(cin>>s>>t){
        int ans = 0;
        bfs(s, t, ans);
        cout<<ans<<endl;
    }
    return 0;
}

 

赞(0)