38分求助各位dalao
查看原帖
38分求助各位dalao
371984
RC·阿柒楼主2022/2/1 23:44

这是记录

代码(手写BFS):

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
int sx,sy,fx,fy;
int mp[301][301];
int nxti[30][2],nxtj[30][2];
int nxtf[30];
int dx[5]={0,0,1,0,-1},
    dy[5]={0,1,0,-1,0};
int a[10000001],b[10000001],step[10000001];
void bfs()
{
    int head=0,tail=1;
    a[tail]=sx,b[tail]=sy;
    step[tail]=0;
    while(head<=tail)
    {
        head++;
        if(mp[a[head]][b[head]]>0)
        {
            int f=0,num=mp[a[head]][b[head]];
            if(nxti[num][f]==a[head]&&nxtj[num][f]==b[head])
                f=1;
            int x=nxti[num][f],y=nxtj[num][f];
            if(mp[x][y]==-1)
                continue;
            tail++;step[tail]=step[head];
            a[tail]=x,b[tail]=y;mp[x][y]=-1;
            if(x==fx&&y==fy)
            {
                cout<<step[tail];
                return;
            }
        }
        for(int i=1;i<=4;i++)
        {
            int x=a[head]+dx[i],y=b[head]+dy[i];
            if(x>0&&y>0&&x<=n&&y<=m&&mp[x][y]>=0)
            {
                tail++;step[tail]=step[head]+1;
                a[tail]=x,b[tail]=y;
                if(mp[x][y]==0)
                    mp[x][y]=-1;
                if(x==fx&&y==fy)
                {
                    cout<<step[tail];
                    return;
                }
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            char c;
            cin>>c;
            if(c=='#')
                mp[i][j]=-1;
            else if(c>='A'&&c<='Z')
            {
                int num=c-'A'+1;
                mp[i][j]=num;
                nxtf[num]++;
                if(nxtf[num]==1)
                    nxti[num][0]=i,nxtj[num][0]=j;
                else 
                    nxti[num][1]=i,nxtj[num][1]=j;
            }
            else if(c=='@')
                sx=i,sy=j,mp[i][j]=-1;
            else if(c=='=')
                fx=i,fy=j;
        }
    }
    bfs();
    return 0;
}

还有我感觉测试点2是不是有问题(可能)

10 200
########################################################################################################################################################################################################
=.B####.#.##....#..###.#.#.#######Y#.#.##.####K..I###....####.#####.####.#.#.########.#...#F#####.##..####......#.##.#######..##.#.#######.#..###.#F......P###..##..##..#.###..###.#.####M.#.###.##.####
####.######.D######..#.#####S.####P#...##.##.##########.##.##.####.##...#########.#.##...#..J.#..#.#.#..######.#N####.##.###.....L####.L..#..#EE#..#.#..###.####..#####..#...Q#####.#####K..#.##.####..#
#######.#.#..#.#...###..##I...#####.#####.####..##.#####.#####..#####.##..#..####.#######.....#..##.#####.#####..#...###.....#####.#..#...#.#...G#...###...##...####.#####....#.##########....#####...##
######.#.#..###..##.##.##.#########.####.#.#.#.###.#.#.###..R##.#.####.####.#.#..####..###########.###.##.#.Q###.#.##.##..####..#####.##B###..#..##..#####.###...##..########.####.#.#..###.##J.##..#..#
##X...#.##...###..########...#.#.##.###......#####.#####.#A####.##.#.##.#..###.##..#####....######..#...####..##.#H..#O...###.##..##.####.#.#.##N.#.####.########..####.##.##..###########...##X#..#..##
#####.###..###.###.#####....##.####.####.#.#..#.#..###.###..###.#.#####..###.###...###.#####.####.##.###...#.#..###.#############.##.##..###.#G##.##..######..###.###.#.####.####.###.###.#..##...##.###
###A..##..#####..#..#.###.##...#YC#.#O...##.#..........######.###..#.#.####.###..#######....##..#.###.#..#..#...##.##M..#.#..#...#.##.####.##.#S####.###.##..#.#######.######.#D######.#..#......###..##
######R..#.###.##.#.#.##.###..######.##..#.##..#####..Z###..#H.#.####.#.#.#.#ZC##...#...#.....###.#..###...#####.###..##.####..##.#.##..#####.##########.#.#..#.#...####.####...###...##...#..###.#...@#
########################################################################################################################################################################################################

为什么我自己数了一遍是73步,std是75???

难道是我题目意思看错了

请各位dalao帮我看看

2022/2/1 23:44
加载中...