AcWing 845. 八数码
标签:while ring find com 一个 没有 结束 字符 red
https://www.acwing.com/problem/content/847/
#includeusing namespace std;
int bfs(string start)
{
string end="12345678x";
queuestring>q;
unordered_mapstring,int>d; //距离数组
q.push(start); // 先把start放进去
d[start]=0; //起点到起点的距离为0
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
while(q.size())
{
auto t=q.front();
q.pop();
int distance =d[t];
if(t==end) return distance; //判断t是否为终点 如果是 就结束
//状态转移
int k=t.find(‘x‘); //先找到x的位置 返回x的下标
int x=k/3,y=k%3; // 把一维数组下标转换为二维数组下标 3x3矩阵
for(int i=0;i4;i++)
{
int a=x+dx[i],b=y+dy[i]; //变化之后的坐标
if(a>=0&&a3&&b>=0&&b3) //如果没有出界
{
swap(t[k],t[a*3+b]); //交换 状态更新 更新完之后 一定要恢复状态
if(!d.count(t)) //如果当前更新完之后的t没有被搜到过 那就找到了一个新的状态
{
d[t]=distance +1; //距离加1
q.push(t); //压入队列
}
swap(t[k],t[a*3+b]); //恢复状态
}
}
}
return -1;
}
int main(){
string start; //初始给定的字符串
for(int i=0;i9;i++){
char c;
cin>>c;
start+=c;
}
coutendl;
}
AcWing 845. 八数码
标签:while ring find com 一个 没有 结束 字符 red
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11746291.html
评论