(蓝桥杯)第八届A组C/C++跳蚱蜢

#include<iostream>  
#include<memory.h>
#include<stack>
#include<string>
#include<cmath>
#include<map>
#include<algorithm> 
#include<sstream>
#include<set>
#include<queue>
//青蛙跳格子,我采用裸广搜的方法,几秒能够出答案,可是有时间限制就不行了
//将青蛙跳看做是,圆盘跳动,这样就只有一个变量在变化了 
//将圆盘当作是0,初始序列用012345678表示,在广搜的时候用set判一下重 
using namespace std;
struct node
{
    string str;
    int pos;
    int step;
    node(string str,int pos,int step):str(str),pos(pos),step(step){}
    
};
int N=9;
set<string> visited;
queue<node> q;
void insertq(node no,int i)
{
    string s=no.str;
    swap(s[no.pos],s[(no.pos+i+9)%9]);
    if(visited.count(s)==0)
    {
        visited.insert(s);
        node n(s,(no.pos+i+9)%9,no.step+1);
        q.push(n);
    }   
}
int main()
{
    node first("012345678",0,0);
    q.push(first);
    
    while(!q.empty())
    {
        node temp = q.front();
        if(temp.str=="087654321")
        {
            cout<<temp.step;
            break;
        }
        else
        {
            insertq(temp,1);
            insertq(temp,-1);
            insertq(temp,2);
            insertq(temp,-2);
            q.pop();
        }
        
    }

     
} 
输出为20
相关文章
相关标签/搜索