这是记录
代码(手写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帮我看看