队列 bfs 迷宫-用bfs走迷宫 队列是自己模拟的

问题描述

用bfs走迷宫 队列是自己模拟的

迷宫问题:
给定一个大小为N*M的迷宫,迷宫由通道和墙壁组成('#','.','S','G'分别表示墙、通道、起点和终点),每一步可以向邻接的上下左右四个方向移动。请给出从起点到终点所需的最小步数。假定起点一定可以到达终点。
没使用STL 我自己模拟队列运行 怎么运行都崩溃
源码

#include<iostream>
#include<queue>
using namespace std;
struct point
{
    int x;
    int y;
};

char maze[10][11]=
{
    "#S######.#",
    "......#..#",
    ".#.##.##.#",
    ".#........",
    "##.##.####",
    "....#....#",
    ".#######.#",
    "....#.....",
    ".####.###.",
    "....#...G#"
};

int N=10,M=11;
int sx=0,sy=1;//起点坐标
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int d[10][11];//标记 路径

int bfs()
{
    point p,que[100];
    int front,rear;
    front=rear=0;
    que[0].x=sx;
    que[0].y=sy;//入队
    rear++;
    d[sx][sy]=0;

    for(int i=0;i<N;i++)
    for(int j=0;j<M;j++)
        d[i][j]=-1;

    while(rear!=front)
    {
            p=que[front];
            front++;//出队
        if(maze[p.x][p.y]=='G')
        {
            break;
        }
        for(int i=0;i<4;i++)
        {
            point t;
            t.x=p.x+dx[i];
            t.y=p.y+dy[i];
            if(t.x>=0 && t.x<N && t.y>=0 && t.y<M && maze[t.x][t.y]!='#' && d[t.x][t.y] == -1)//表示该点未被访问
            {
                d[t.x][t.y]=d[p.x][p.y]+1;
                que[++rear]=t;
            }
        }
    }
    return maze[p.x][p.y];//
}

int main()
{
    int res = bfs();
    cout<<res<<endl;
    return 0;
}

解决方案

没仔细看代码,不过有没有可能是超过数组边界了,毕竟数组长度才100。
如果不想加长的话可以试试循环队列。

时间: 2024-10-21 15:57:56

队列 bfs 迷宫-用bfs走迷宫 队列是自己模拟的的相关文章

基于C语言实现简单的走迷宫游戏_C 语言

本文实例讲述了C语言实现简单的走迷宫游戏的方法,代码完整,便于读者理解. 学数据结构时用"栈"写的一个走迷宫程序,实际上用到双向队列,方便在运行完毕后输出经过的点. #include <cstdio> #include <deque> #include <windows.h> using namespace std; class node { public: int x,y; int lastOpt; }; deque<node> sta

走迷宫C#版(一)

//迷宫类相关 using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Collections; namespace MazeDemo{ /// <summary> /// 迷宫类 /// </summary> public class CMaze { bool[,] mg; //地图格子 Stack stack; //堆栈 Point in_p; //入口点 Point out_p

c语言-C 的走迷宫问题 实在找不出问题所在了。。。

问题描述 C 的走迷宫问题 实在找不出问题所在了... mice.txt文件内容24 24 1 1 24 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 00 0 0 0

java算法-关于Java的走迷宫问题

问题描述 关于Java的走迷宫问题 题目是这样的: 用户输入一个值,生成一个n*n的矩阵,然后每个符号之间用空格隔开,要求从A到B,如果当前位置的坐标是"+"那么下一个坐标则必须为"-",找出最短的路径的步数 我的代码是把所有的情况写出来,但是出错了,请各位大神看看哪里有问题 import java.util.ArrayList; import java.util.Scanner; public class Main { //矩阵的大小 static int n;

c语言走迷宫问题,输不出结果。。。

问题描述 c语言走迷宫问题,输不出结果... #include void print (int map[][10]); //打印迷宫 void walk (int map[][10], int x, int y); //走迷宫 void push (int x, int *stack); //进栈 void delet (); //出栈 int stackx[100]; //用来存放每一步的x值 int stacky[100]; //每一步的y值 int size = 0; //一共已经走的步数

【重磅】Nature子刊 | 增强学习强化,混合脑生化鼠“走迷宫”能力大幅提升

神经科学和计算机科学的发展加强了大脑和机器之间的融合,现在可以用机械的方式对生物的感觉.记忆和运动机能进行增强或修复,科学家也做出了动物机器人和嵌入生物大脑的认知机器人.诸如此类的生物智能与人工智能相结合,使人不禁思考:这样的混合系统是否比单独的生物系统更加智能? 为了解决这个问题,浙江大学吴朝晖课题组的研究人员率先进行了这样的实验,他们使用采用了机器学习规则的计算系统增强小鼠的大脑,然后观察这样的混合系统是否在学习走迷宫的任务中具有更强的学习能力. 论文摘要:混合脑机系统的迷宫学习 摘要 推动

老鼠走迷宫程序实例

/*--------------------------------------------------------------------------------------------//文件名称:MazeMouse.cpp//功    能:找出走出迷宫的所有路径,以及最短路径.//作    者:晒晒周--------------------------------------------------------------------------------------------*//*

走迷宫C#版(二)

//窗体,调用... using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Threading; namespace MazeDemo{ /// <summary> /// Form1 的摘要说明. /// </summary> public cla

2014秋C++第19周 补充代码 回溯法走迷宫

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  问题: 参考代码: #include <iostream> #include <iomanip> #include <cstdlib> using namespace std; #define MaxSize 100 int maze[10][10] =