60分求debug
查看原帖
60分求debug
709447
tx774楼主2023/3/20 22:26

60分 第2—第6+第10

奇了怪了

ans+1还有40分,而且还是不一样的点

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

int mp[55][55];
int ap[55][55];
int dis[55][55][5];
int ch[4][9]={
{0,0,0,0,0,0,0,0,0},
{0,-1,0,0,1,1,0,0,-1},
{0,-2,0,0,2,2,0,0,-2},
{0,-3,0,0,3,3,0,0,-3},
};
struct rb{ 
    int x,y;
    int di;//方向 
    int step;
};
queue <rb> q;
int n,m;

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            cin>>ap[i][j];

    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            for(int k=1;k<=4;++k)
                dis[i][j][k]=INT_MAX;

    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            if(ap[i][j]==1)
            {
                mp[i-1][j]=1;
                mp[i][j-1]=1;
                mp[i-1][j-1]=1;
                mp[i][j]=1;
            }

    int sx,sy;
    int ox,oy;char sdi;
    cin>>sx>>sy>>ox>>oy;
    cin>>sdi;

    rb s;
    if(sdi=='N'){s.di=1;}
    else if(sdi=='E'){s.di=2;}
    else if(sdi=='S'){s.di=3;}
    else if(sdi=='W'){s.di=4;}
    s.x=sx;s.y=sy;s.step=0;
    dis[sx][sy][s.di]=0;
    q.push(s);
    while(!q.empty())
    {
        rb now;
        now=q.front();q.pop();  
        if(dis[now.x][now.y][now.di+1]==INT_MAX)
        {
            rb nx=now;nx.di=now.di+1;nx.step++;
            q.push(nx);dis[now.x][now.y][now.di+1]=nx.step;
        }
        if(dis[now.x][now.y][now.di-1]==INT_MAX)
        {
            rb nx=now;nx.di=now.di-1;nx.step++;
            q.push(nx);dis[now.x][now.y][now.di-1]=nx.step;
        }
        for(int i=1;i<=3;++i)
        {
            rb nx=now;
            nx.x=now.x+ch[i][now.di*2-1];
            nx.y=now.y+ch[i][now.di*2];
            nx.step++;
            if(mp[nx.x][nx.y]==1)
                break;
            if(dis[nx.x][nx.y][nx.di]==INT_MAX)
            {
                dis[nx.x][nx.y][nx.di]=nx.step;
                q.push(nx);             
            }
        }
    }

    int ans=INT_MAX;
    for(int i=1;i<=4;++i)
        if(dis[ox][oy][i]<ans)
            ans=dis[ox][oy][i];
    if(ans==INT_MAX)
        cout<<"-1";
    else
        cout<<ans;
    return 0;
}
2023/3/20 22:26
加载中...