(藍橋杯)第八屆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
相關文章
相關標籤/搜索