走迷宫!我服了!不会写了!

img

我...写了点..还没啥反应..完了条件好像还错了
呜呜呜呜呜呜

#include <bits/stdc++.h>
using namespace std;

struct point{
int x;
int y;
int step;
}a,b;

queueq;

int main()
{
int n,m;
cin>>n>>m;
char mp[n][m],vis[n][m];
int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};

int x,y,s,t;
cin>>x>>y>>s>>t;  
a.x=x,a.y=y,a.step=0;
vis[x][y]=1;
q.push(a);  
int ans=0;  //读入起点终点坐标


for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        cin>>mp[i][j]; //读入地图 
for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)  
        {
        if(mp[i][j]=='*') mp[i][j]='1';
        if(mp[i][j]=='.') mp[i][j]='0';
        }             //字符迷宫变为 0,1 迷宫 

memset(vis,0,sizeof(vis));
while(!q.empty()) q.pop(); //初始化操作 


while(!q.empty())
{
    a=q.front();
    q.pop();
    
    if(a.x==s&&a.y==t) //越界 a.x<1&&a.x>n&&a.y<1&&a.y>m
    {
        ans=a.step;
        break;
    }
    
    for(int i=0;i<=3;i++)
    {
        int xx=a.x+dir[i][0];
        int yy=a.y+dir[i][1];
        if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&!vis[xx][yy]&&!mp[xx][yy]) //这个点 没走过 还不是墙    
        {
            vis[xx][yy]=1;
            b.x=xx,b.y=yy,b.step=a.step+1;
            q.push(b);
        }
    }
    
}
cout<<ans<<endl;

return 0;
}

请看这个帖子下面的 “相关推荐”, 你就会发现很多解答。