計蒜客 一維座標的移動 BFS

#include<iostream>
#include<queue>
using namespace std;
int n,A,B;
struct node{
	int v;
	int deep;
}Node;
bool inq[5010] ={false};
int ans = 0;
void BFS(int A){
	queue<node> q;
	Node.v = A;
	Node.deep = 0;
	q.push(Node);
	while(!q.empty()){
		node top = q.front();
		q.pop();
		if(top.v ==B){
			ans = top.deep;
			break;
		}
	if(top.v+1<=n&&inq[top.v+1] ==false){
		Node.v = top.v +1;
		Node.deep = top.deep +1;
		q.push(Node);
		inq[top.v+1] = true;
	}
	if(top.v-1>=0&&inq[top.v-1] ==false){
		Node.v = top.v - 1;
		Node.deep = top.deep +1;
		q.push(Node);
		inq[top.v-1] = true;
	}
	if(top.v*2<=n&&inq[top.v*2] ==false){
		Node.v = top.v*2;
		Node.deep = top.deep +1;
		q.push(Node);
		inq[top.v*2] = true;
	}
	}
}
int main(){
	cin>>n>>A>>B;
	inq[A] = true;
	BFS(A);
	cout<<ans<<'\n'; 
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章