ZOJ 2416 Open the Lock (BFS)

来源:互联网 发布:软件杂志邀请函 编辑:程序博客网 时间:2024/04/27 20:13
#include <iostream>#include <cstdio>#include <queue>#include <memory.h>using namespace std;#define pii pair<int,int> int delta[]={-1,1};bool vis[10000];int bfs(int s,int t){memset(vis,0,sizeof(vis));queue<pii> q;q.push(make_pair(s,0));while (q.size()){pii ts=q.front();q.pop();if(ts.first==t)return ts.second;for (int i=0;i<4;++i){for (int j=0;j<2;++j){int arr[]={ts.first/1000,ts.first/100%10,ts.first/10%10,ts.first%10};arr[i]+=delta[j];if(arr[i]==0)arr[i]=9;else if(arr[i]==10)arr[i]=1;int ne=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3];if(ne>=1111&&!vis[ne]){vis[ne]=1;q.push(make_pair(ne,ts.second+1));}}}for (int i=0;i<3;++i){int arr[]={ts.first/1000,ts.first/100%10,ts.first/10%10,ts.first%10};swap(arr[i],arr[i+1]);int ne=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3];if(ne>=1111&&!vis[ne]){vis[ne]=1;q.push(make_pair(ne,ts.second+1));}}}}int main(){int t;scanf("%d",&t);while (t--){int s,t;scanf("%d%d",&s,&t);printf("%d\n",bfs(s,t));}return 0;}

原创粉丝点击