[蓝桥杯][历届试题]九宫重排

题目链接:http://www.dotcpp.com/oj/problem1426.html

典型的BFS,与map连用可以达到意想不到的效果。而且不必建九宫图,只需要特判某种走法不成功即可。

上述所谓不成功的走法,即指3 2无通路,5 6无通路。

#include
#include
#include
using namespace std;
int dx[4]={1,-1,3,-3};
map mp;
string s,e;
struct node
{
    string str;
    int step;
};
bool no(int x,int y)
{
    if(x==2&&y==3) return 1;
    if(x==3&&y==2) return 1;
    if(x==5&&y==6) return 1;
    if(x==6&&y==5) return 1;
    return 0;
}
void bfs()
{
    queue q;
    node tmp,now;
    tmp.step=0;
    tmp.str=s;
    q.push(tmp);
    while(q.size())
    {
        now=q.front();q.pop();
        if(now.str==e)
        {
            cout<8) continue;
            if(no(x,y)) continue;
            swap(s[x],s[y]);
            if(mp[s]) continue;
            mp[s]=1;
            tmp.step=now.step+1;
            tmp.str=s;
            q.push(tmp);
        }
    }
    cout<<"-1"<>s>>e;
    mp[s]=1;
    bfs();
    return 0;
}

 

你可能感兴趣的:([蓝桥杯][历届试题]九宫重排)