社区讨论
两个小问题(想不出标题了)
B3626跳跃机器人参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mhj2pqth
- 此快照首次捕获于
- 2025/11/03 19:45 4 个月前
- 此快照最后确认于
- 2025/11/03 19:45 4 个月前
CPP
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int n;
bool check(int x){
if(x<=0||x>n){
return false;
}
else{
return true;
}
}
void bfs(){
queue <int> q;
vector <int> dis(n,-1);
vector <bool> vis(n,false);
q.push(1);
dis[1]=0;
vis[1]=true;
while(!q.empty()){
int cur=q.front();
q.pop();
if(check(cur+1)&&!vis[cur+1]){
vis[cur+1]=true;
q.push(cur+1);
dis[cur+1]=dis[cur]+1;
}
if(check(cur-1)&&!vis[cur-1]){
vis[cur-1]=true;
q.push(cur-1);
dis[cur-1]=dis[cur]+1;
}
if(check(cur*2)&&!vis[cur*2]){
vis[cur*2]=true;
q.push(cur*2);
dis[cur*2]=dis[cur]+1;
}
}
cout<<dis[n]<<endl;
return;
}
int main(){
cin>>n;
bfs();
//cout<<"error"<<endl;
return 0;
}
第一个问题:此代码可以通过本题,但是在本地编译时,输入
30,并不会执行到//cout<<"error"<<endl部分,且在输出答案6后有显著卡顿?不知道为什么。第二个问题:在
CPPbfs()函数的while()循环中以下部分if(check(cur+1)&&!vis[cur+1]){
vis[cur+1]=true;
q.push(cur+1);
dis[cur+1]=dis[cur]+1;
}
if(check(cur-1)&&!vis[cur-1]){
vis[cur-1]=true;
q.push(cur-1);
dis[cur-1]=dis[cur]+1;
}
if(check(cur*2)&&!vis[cur*2]){
vis[cur*2]=true;
q.push(cur*2);
dis[cur*2]=dis[cur]+1;
}
我一开始错误地写成
CPPvis[cur]=true;
if(check(cur+1)&&!vis[cur+1]){
q.push(cur+1);
dis[cur+1]=dis[cur]+1;
}
if(check(cur-1)&&!vis[cur-1]){
q.push(cur-1);
dis[cur-1]=dis[cur]+1;
}
if(check(cur*2)&&!vis[cur*2]){
q.push(cur*2);
dis[cur*2]=dis[cur]+1;
}
导致错误,但我并未完全理解为什么这样会产生错误,希望dalao为我详细说明一下。
球解答
回复
共 7 条回复,欢迎继续交流。
正在加载回复...