- 问答
- 2019-05-20 16:27:33 @
要死
10 条评论
-
3g93zhmq (3g93zhmq) LV 8 @ 2019-05-26 22:33:48
-
2019-05-20 16:41:08@
微信:twd_22
-
2019-05-20 16:40:39@
QQ:459834574
-
2019-05-20 16:39:20@
思加学堂QQ:940444476
-
2019-05-20 16:38:45@
QQ:2491037413
-
2019-05-20 16:38:24@
aolaxin:240096404
-
2019-05-20 16:38:09@
vijos:248452688
-
2019-05-20 16:35:06@
//魔兽世界
#include<iostream>
#include<cstdio>
int d[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
char vis[101][101],map[101][101];
int n,m,q[20001][2],dist[101][101],g[30][4];
void bfs(){
int t,x0,y0,x,y;
q[0][0]=q[0][1]=1;
vis[1][1]=1;
dist[1][1]=0;
for(int l=0,r=1;l<r;l++){
x0=q[l][0];
y0=q[l][1];
for(int i=0;i<4;i++){
x=x0+d[i][0];
y=y0+d[i][1];
if(map[x][y]){
t=map[x][y];
if(t>1){
if(g[t][0]==x&&g[t][1]==y){
x=g[t][2];
y=g[t][3];
}else{
x=g[t][0];
y=g[t][1];
}
}
if(vis[x][y])continue;
dist[x][y]=dist[x0][y0]+1;
q[r][0]=x;
q[r][1]=y;
vis[x][y]=1;
r++;
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",&map[i][1]);
for(int j=1;map[i][j];j++)
if(map[i][j]<60)map[i][j]=49-map[i][j];
else{
map[i][j]-=63;
int t=map[i][j];
if(g[t][0]==0){
g[t][0]=i;
g[t][1]=j;
}else{
g[t][2]=i;
g[t][3]=j;
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
dist[i][j]=2147483647;
bfs();
if(dist[n][m]==2147483647)printf("No Solution.");
else printf("%d",dist[n][m]);
return 0;
} -
2019-05-20 16:29:11@
ssjj:**1994174017**
-
2019-05-20 16:28:06@
luogu.org
- 1