这题BFS一定要使用优先队列优化吗?谁能教一教我
#include<bits/stdc++.h>
#define up(x,y) for(int i=x;i<=y;i++)
#define pii pair<int,int>
#define mp(x,y) make_pair(x,y)
#define st first
#define nd second
using namespace std;
int a[111][111],b[111][111],dis[111][111],m,n,x,y,c;
int dir[2][4]={{0,1,0,-1},{1,0,-1,0}};
const int inf=0x3f;
queue<pii>q;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
memset(dis,inf,sizeof dis);
dis[1][1]=0;
cin>>m>>n;
up(1,n){
cin>>x>>y>>c;
a[x][y]=c+1;
}
q.push(mp(1,1));
while(!q.empty()){
pii now=mp(q.front().st,q.front().nd);
int nx,ny,cost=0;
q.pop();
up(0,3){
nx=now.st+dir[0][i];
ny=now.nd+dir[1][i];
if(nx<1||nx>m||ny<1||ny>m)continue;
if(!a[nx][ny]&&!a[now.st][now.nd])continue;//不能连续使用魔法
if(!a[nx][ny])cost=2,b[nx][ny]=a[now.st][now.nd];//走到无色方块,使用了魔法
else if(a[nx][ny]!=a[now.st][now.nd]&&a[now.st][now.nd])cost=1;//从有色方块走到异色方块
else if(!a[now.st][now.nd]&&b[now.st][now.nd]!=a[nx][ny])cost=1;//从魔法方块走到异色方块
if(dis[now.st][now.nd]+cost<=dis[nx][ny])dis[nx][ny]=dis[now.st][now.nd]+cost;
else continue;
q.push(mp(nx,ny));
}
}
/*
cout<<endl;
up(1,m){
for(int j=1;j<=m;j++)cout<<a[i][j]<<'\t';
cout<<endl;
}
cout<<endl;
up(1,m){
for(int j=1;j<=m;j++)cout<<(dis[i][j]<inf?dis[i][j]:-1)<<'\t';
cout<<endl;
}
*/
cout<<(dis[m][m]<inf?dis[m][m]:-1);
return 0;
}