#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<limits.h>
#include<queue>
#include<stack>
using namespace std;
#define max(a, b) a>b?a:b
#define min(a, b) a<b?a:b
#define N 110
typedef struct maze
{
int a, b, c, step;
} MAZE;
int s, n, m, visit[N][N][N];
void BFS();
int main()
{
while(scanf("%d%d%d", &s, &n, &m), s+n+m)
{
if(s%2!=0)
printf("NO\n");
else
BFS();
}
return 0;
}
void BFS()
{
queue<MAZE>que;
memset(visit, 0, sizeof(visit));
MAZE p, q;
p.a=s;
p.b=0;
p.c=0;
p.step=0;
visit[p.a][p.b][p.c]=1;
que.push(p);
while(!que.empty())
{
p=que.front();
que.pop();
if((p.a==p.b&&p.c==0)||(p.a==p.c&&p.b==0)||(p.b==p.c&&p.a==0))
{
printf("%d\n", p.step);
return;
}
q=p;
if(p.a!=0)
{
if(p.a>n-p.b)//也就是说p.a还有剩余
{
//q= (MAZE) {p.a-n+p.b, n, p.c, p.step+1};
q.a=p.a-n+p.b;
q.b=n;
q.c=p.c;
q.step=p.step+1;
}
else
转载于:https://www.cnblogs.com/wazqWAZQ1/p/4663393.html
本文介绍了一个使用广度优先搜索(BFS)算法解决迷宫问题的C++实现。通过定义迷宫结构体,利用队列进行状态扩展,实现了从起点到终点的最短步数计算。代码中包含了完整的BFS过程,适用于理解BFS算法及其在迷宫求解中的应用。
119

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



