基本思路:
广度优先遍历,每次找到1的位置,分别向上、向下、向左、向右移动。把移动后的每个状态存储到队列中,弹出队头,判断是否为最终结果状态,如果是,输出遍历的层数(即移动步数),如果不是,把现阶段状态继续执行找到1向上向下向左向右移动操作。
#include<stdio.h>
typedef struct MyType
{
int number[3][3];int level;
}MyType;
MyType queue[10000];
MyType GetHead(int n)
{
return queue[n];
}
//是否为最终结果状态
int IsFind(MyType cur)
{
int flag=1;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
if(cur.number[i][j]!=3*i+j+1)
{
flag=0;
break;
}
}
return flag;
}
int main()
{

这篇博客介绍了如何使用广度优先遍历(BFS)解决华为机试中的一个高级题目,涉及在九宫格中寻找路径的问题。作者通过将每个1的位置移动至上下左右来扩展状态,并存入队列中。每轮遍历检查当前状态是否为最终结果,若找到则输出步数;否则继续进行移动操作。然而,博客中提到一个问题,即如何判断给定的初始状态无法达到最终结果状态。
最低0.47元/天 解锁文章
8419

被折叠的 条评论
为什么被折叠?



