求助,我认为两个代码没有逻辑区别,但第一个只能部分得分
查看原帖
求助,我认为两个代码没有逻辑区别,但第一个只能部分得分
1326044
mx321465楼主2024/4/3 21:21

第一个代码(无法拿全分)

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int N,A,B;
int dist[201];
int ans[201];
void bfs(int A,int B){
   memset(ans,-1,sizeof(ans));
   queue<int> que;
   que.push(A);
   ans[A]=0;
   while(!que.empty()){
   	int temp = que.front();
   	que.pop();
   	int a=temp+dist[temp];
   	if(a<=N) {
   		if(ans[a]!=-1) continue;
   		ans[a]=ans[temp]+1;
   		if(a==B) return;
   		que.push(a);
   	}
   	int b=temp-dist[temp];
   	if(b>0) {
   		if(ans[b]!=-1) continue;
   		ans[b]=ans[temp]+1;
   		if(b==B) return;
   		que.push(b);
   	}
   }
}
int main() {
   cin>>N>>A>>B;
   if(A==B) {
   	cout<<0;
   	return 0;
   }
   for(int i=1;i<=N;i++){
   	cin>>dist[i];
   }
   bfs(A,B);
   cout<<ans[B];
   return 0;
}

第二个代码(可拿全分)

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int N,A,B;
int dist[500];
int ans[500];
void bfs(int A,int B){
   memset(ans,-1,sizeof(ans));
   queue<int> que;
   que.push(A);
   ans[A]=0;
   while(!que.empty()){
   	int temp = que.front();
   	que.pop();
   	int a=temp+dist[temp];
   	if(a<=N) {
   		if(ans[a]==-1) {
   			ans[a]=ans[temp]+1;
   			if(a==B) return;
   			que.push(a);
   		}
   		
   	}
   	int b=temp-dist[temp];
   	if(b>0) {
   		if(ans[b]==-1){
   			ans[b]=ans[temp]+1;
   			if(b==B) return;
   			que.push(b);
   		}

   	}
   }
}
int main() {
   cin>>N>>A>>B;
   if(A==B) {
   	cout<<0;
   	return 0;
   }
   for(int i=1;i<=N;i++){
   	cin>>dist[i];
   }
   bfs(A,B);
   cout<<ans[B];
   return 0;
}
2024/4/3 21:21
加载中...