传送门
01
b
f
s
01bfs
01bfs模板
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int n,m,T,M[maxn][maxn];
int dis[maxn][maxn];
struct node{
int x,y;
node(int X=0,int Y=0){x=X,y=Y;}
inline bool inmap(){return (1<=x&&x<=n)&&(1<=y&&y<=m);}
friend inline node operator+(const node &a,const node &b){
return node(a.x+b.x,a.y+b.y);
}
}d[4];
inline int get_ch(){
char ch=getchar();
while('a'>ch||'z'<ch) ch=getchar();
return ch-'a';
}
inline int read(){
int x=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x;
}
inline void bfs(){
memset(dis,0x3f,sizeof(dis));
deque<node> Q;dis[1][1]=0,Q.push_front(node(1,1));
while(!Q.empty()){
node u=Q.front(),v;Q.pop_front();
for(int i=0;i<4;++i){
v=u+d[i];if(!v.inmap()) continue;
int w=(M[u.x][u.y]!=M[v.x][v.y]);
if(dis[v.x][v.y]>dis[u.x][u.y]+w){
dis[v.x][v.y]=dis[u.x][u.y]+w;
w?Q.push_back(v):Q.push_front(v);
}
}
}
}
int main(){
//freopen("KATHTHI.in","r",stdin);
T=read(),d[0]=node(0,1),d[1]=node(1,0),d[2]=node(0,-1),d[3]=node(-1,0);
while(T--){
n=read(),m=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
M[i][j]=get_ch();
bfs(),printf("%d\n",dis[n][m]);
}
}