题目链接:Open the Lock
给定一个四位数,将它变成另外一个四位数
只能有一下几种操作
1、给一个数字+1或者-1,给9+1变成0,给0-1变成9
2、将一个数字和其左右的数字交换
每个操作是1步,求最少步数
bfs,每次出队进行上述所有操作,新节点入队
代码:
#include <iostream>
#include <stdio.h>
#include <queue>
#include <memory.h>
using namespace std;
struct node
{
int s[4];
int step;
};
int s[4],e[4];
int vis[10000];
int bfs()
{
bool tag=true;
queue<node>q;
node cur,next;
for(int i=0;i<4;i++)cur.s[i]=s[i];
cur.step=0;
q.push(cur);
while(!q.empty()){
tag=true;
cur=q.front();q.pop();
for(int i=0;i<4;i++){
if(cur.s[i]!=e[i])tag=false;
}