mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Create 3278.cpp
This commit is contained in:
parent
c743f823db
commit
5b0fa38cb7
75
POJ/3278.cpp
Normal file
75
POJ/3278.cpp
Normal file
|
@ -0,0 +1,75 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <stack>
|
||||
using namespace std;
|
||||
|
||||
struct treenode
|
||||
{
|
||||
int value;
|
||||
treenode *plus,*reduce,*add;
|
||||
};
|
||||
|
||||
typedef struct treenode tree;
|
||||
|
||||
tree* root=NULL;
|
||||
|
||||
stack<tree*> bus;
|
||||
stack<tree*> tmpbus;
|
||||
stack<tree*> answerbus;
|
||||
|
||||
bool vis[100001];
|
||||
|
||||
int main()
|
||||
{
|
||||
int n,k;
|
||||
scanf("%d %d",&n,&k);
|
||||
root=new (nothrow) tree;
|
||||
root->value=n;
|
||||
bus.push(root);
|
||||
int currentstep=-1;
|
||||
while(answerbus.empty())
|
||||
{
|
||||
++currentstep;
|
||||
while(!bus.empty())
|
||||
{
|
||||
tree* father=bus.top();
|
||||
vis[father->value]=true;
|
||||
if(father->value==k)
|
||||
{
|
||||
answerbus.push(father);
|
||||
break;
|
||||
}
|
||||
bus.pop();
|
||||
int vplus=father->value*2,vreduce=father->value-1,vadd=father->value+1;
|
||||
if(vplus<100001&&!vis[vplus])
|
||||
{
|
||||
tree* node=new (nothrow) tree;
|
||||
node->value=vplus;
|
||||
father->plus=node;
|
||||
tmpbus.push(node);
|
||||
}
|
||||
if(vadd<100001&&!vis[vadd])
|
||||
{
|
||||
tree* node=new (nothrow) tree;
|
||||
node->value=vadd;
|
||||
father->add=node;
|
||||
tmpbus.push(node);
|
||||
}
|
||||
if(vreduce>-1&&!vis[vreduce])
|
||||
{
|
||||
tree* node=new (nothrow) tree;
|
||||
node->value=vreduce;
|
||||
father->reduce=node;
|
||||
tmpbus.push(node);
|
||||
}
|
||||
}
|
||||
while(!tmpbus.empty())
|
||||
{
|
||||
bus.push(tmpbus.top());
|
||||
tmpbus.pop();
|
||||
}
|
||||
}
|
||||
printf("%d\n",currentstep);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user