题目大意:你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。输出最小的旋转次数。
思路:典型的BFS,因为有最小的次数这样的字眼啊!!!而且字符串的长度还是不变的,不用BFS还用什么?
#include <iostream>
#include<queue>
#include<string>
#include<vector>
#include<unordered_set>
using namespace std;
int main(int argc, const char * argv[])
{
string target;
cin>>target;
unordered_set<string>dead;
int num;
cin>>num;
string tt;
for(int i=0;i!=num;++i)
{
cin>>tt;
dead.insert(tt);
}
if(dead.count(\"0000\"))
{
cout<<\"-1\"<<endl;
return 0;
}
queue<string>temp;
temp.push(\"0000\");
int res=0;
unordered_set<string>visited;
visited.insert(\"0000\");
while(!temp.empty())
{
++res;
int number=(int)temp.size();
while(number--)
{
string tt=temp.front();
temp.pop();
for(int i=0;i<4;++i)
{
for(int j=-1;j<=1;++j)
{
string m=tt;
if(!j)
continue;
m[i]=(m[i]-\'0\'+j+10)%10+\'0\';
if(m==target)
{
cout<<res<<endl;
return 0;
}
if(!visited.count(m)&&!dead.count(m))
{
visited.insert(m);
temp.push(m);
}
}
}
}
}
cout<<-1<<endl;
}
继续阅读与本文标签相同的文章
-
望闻问切,用好人工智能
2026-05-19栏目: 教程
-
数字时代如何保护个人信息
2026-05-19栏目: 教程
-
SPAR国际物流峰会在威海召开
2026-05-19栏目: 教程
-
NewBalance新款3D打印运动鞋 改变前掌中底
2026-05-19栏目: 教程
-
简易区分物联网和互联网
2026-05-19栏目: 教程
