qq_33863518 2017-03-17 01:46 采纳率: 37.5%
浏览 1198

这段程序提示Runtime Error(ACCESS_VIOLATION),求助,为什么

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<stack>
#define MAXN 40010
using namespace std;
int a[210][210];
int n,m;
struct Point{
    int x,y;
};
int x1,y1,x2,y2;
int l;
stack<Point>sta;
int vis[210][210];
int stepx[210];
int stepy[210];
int judge(int xx,int yy)
{

    if(xx<0||yy<0||xx>=n||yy>=m)
        return 0;
    if(a[xx][yy]==0)
        return 0;
    return 1;
}
int bfs(int sx,int sy,int ex,int ey)
{
    if(sx==ex&&sy==ey)
    {
        return vis[sx][sy];
    }
    else
    {
        int firstx=0,firsty=0;
        int lastx=0,lasty=0;
        stepx[firstx++]=sx;
        stepy[firsty++]=sy;
        while(1)
        {
            int xs=stepx[lastx++];
            int ys=stepy[lasty++];
            if(xs==ex&&ys==ey)
                return vis[xs][ys];
            if(judge(xs+1,ys)&&(!vis[xs+1][ys]))
            {
                vis[xs+1][ys]=vis[xs][ys]+1;
                stepx[firstx++]=xs+1;
                stepy[firsty++]=ys;
            }
             if(judge(xs-1,ys)&&(!vis[xs-1][ys]))
            {
                vis[xs-1][ys]=vis[xs][ys]+1;
                stepx[firstx++]=xs-1;
                stepy[firsty++]=ys;
            }
             if(judge(xs,ys+1)&&(!vis[xs][ys+1]))
            {
                vis[xs][ys+1]=vis[xs][ys]+1;
                stepx[firstx++]=xs;
                stepy[firsty++]=ys+1;
            }
             if(judge(xs,ys-1)&&(!vis[xs][ys-1]))
            {
                vis[xs][ys-1]=vis[xs][ys]+1;
                stepx[firstx++]=xs;
                stepy[firsty++]=ys-1;
            }
        }
    }
}
char s[210][210];
int main()
{
    while(scanf("%d %d",&n,&m)==2)
    {
        memset(s,0,sizeof(s));
        memset(a,0,sizeof(a));
        memset(stepx,0,sizeof(stepx));
        memset(stepy,0,sizeof(stepy));
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;++i)
          scanf("%s",s[i]);
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<m;++j)
            {
                if(s[i][j]=='Y')
                {
                    a[i][j]=3;
                    x1=i;
                    y1=j;
                }
                if(s[i][j]=='M')
                {
                    a[i][j]=4;
                    x2=i;
                    y2=j;
                }
                if(s[i][j]=='#')
                {
                    a[i][j]=0;
                }
                if(s[i][j]=='.')
                {
                    a[i][j]=1;
                }
                if(s[i][j]=='@')
                {
                    a[i][j]=5;
                    Point p;
                    p.x=i;
                    p.y=j;
                    sta.push(p);
                }
            }
        }
        l=MAXN;
        while(!sta.empty())
        {   int x3=sta.top().x;
            int y3=sta.top().y;
           // memset(a,0,sizeof(a));
        memset(stepx,0,sizeof(stepx));
        memset(stepy,0,sizeof(stepy));
        memset(vis,0,sizeof(vis));
            int l1=bfs(x1,y1,x3,y3);
           // memset(a,0,sizeof(a));
        memset(stepx,0,sizeof(stepx));
        memset(stepy,0,sizeof(stepy));
        memset(vis,0,sizeof(vis));
            int l2=bfs(x2,y2,x3,y3);
            sta.pop();
            if(l1+l2<l)
                l=l1+l2;
        }
        printf("%d\n",l*11);
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2017-03-17 02:22
    关注

    调试下,而不是直接运行,看出现错误的行,检查指针是否为野指针或者尝试修改常量等情况

    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏