求大佬帮帮我%99.17
这个bfs代码还有什么问题哎,求个大神帮助
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#include <map>
#include <math.h>
#include <set>
#include <vector>
#define ll long long
const int INF = 0x3f3f3f3f;
const int NINF = -INF - 1;
using namespace std;
int vis[1005][1005];//标记是否走过
int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};//四个方向
char an[1005][1005];//地图
int t,n,m;
struct node
{
int x;
int y;
int step;
};
node temp,now,dd;
queue<node>q;
node a[1000005];//入口
node b[1000005];//出口
int check1(node w)
{
for(int i=1;i<=t;i++)
{
if(w.x==a[i].x&&w.y==a[i].y)
{
return 1;
}
else if(w.x==b[i].x&&w.y==b[i].y)
{
return 1;
}
}
return 0;
}
int check2(node p)
{
if(!vis[p.x][p.y]&&p.x>=1&&p.x<=n&&p.y>=1&&p.y<=m&&an[p.x][p.y]!='#') return 1;
else return 0;
}
void bfs()
{
while(q.size())
{
temp=q.front();
q.pop();
for(int i=0;i<4;i++)
{
now=temp;
now.x=temp.x+dir[i][0];
now.y=temp.y+dir[i][1];
now.step++;
dd=now;
if(an[now.x][now.y]=='T')
{
printf("%d\n",now.step+(now.step-1)/8);
return;
}
if(check1(now))
{
for(int i=1;i<=t;i++)
{
if(now.x==a[i].x&&now.y==a[i].y)
{
dd.x=b[i].x;
dd.y=b[i].y;
vis[dd.x][dd.y]=1;
q.push(dd);
}
else if(now.x==b[i].x&&now.y==b[i].y)
{
dd.x=a[i].x;
dd.y=a[i].y;
vis[dd.x][dd.y]=1;
q.push(dd);
}
}
}
if(check2(now))
{
vis[now.x][now.y]=1;
q.push(now);
}
}
}
printf("-1\n");
}
int main()
{
int x1,y1,x2,y2;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>an[i][j];
if(an[i][j]=='S')
{
temp.x=i;
temp.y=j;
temp.step=0;
vis[i][j]=1;
q.push(temp);
}
}
}//输入地图
cin>>t;
for(int i=1;i<=t;i++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
a[i].x=x1;a[i].y=y1;
b[i].x=x2;b[i].y=y2;
}
bfs();
return 0;
}
