迷宫最短路径 练习

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define maxsize 150
int maze[maxsize][maxsize];
int dir[4][2]={1,0,-1,0,0,1,0,-1};


void ShortestPath(int m,int n)
{
    bool visited[m][n];
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            visited[m][n]=false;


    queue<int> qx,qy;
    int ex,ey;ex=ey=0;
    qx.push(ex);
    qy.push(ey);
    visited[ey][ey]=true;


    bool findway=false;
    while(!findway)
    {
        ex=qx.front();
        ey=qy.front();
        for(int i=0;i<4;i++)
        {
            int next_ex=ex+dir[i][0];
            int next_ey=ey+dir[i][1];
            if(next_ex>=0&&next_ex<n && next_ey>=0&&next_ey<m && maze[next_ey][next_ex]==0 && visited[next_ey][next_ex]==false)///判断是否出界,是否能走,是否访问过
            {
                qx.push(next_ex);
                qy.push(next_ey);
                visited[next_ey][next_ex]=true;
            }
            if(next_ex==m-1 && next_ey==n-1)
                findway=true;
        }
        cout<<qy.front()<<"."<<qx.front()<<endl;
        qx.pop();
        qy.pop();
    }
}


int main()
{
    cout<<"Enter the size of the maze:"<<endl;
    int m,n;
    cin>>m>>n;
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++)
            cin>>maze[i][j];
    ShortestPath(m,n);
    cout<<m-1<<"."<<n-1<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值