这是我的代码。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
char u[101][101];
ll dis[101][101],sx,sy,ex,ey,n,m;
bool vis[101][101];
ll bfs(){
cout<<m<<" bob\n";
vis[sx][sy]=true;
queue<pair<ll,ll> > q;
q.push(make_pair(sx,sy));
dis[sx][sy]=0;
while(!q.empty()){
ll x=q.front().first,y=q.front().second;
q.pop();
ll nx=x,ny=y+1;
while(!vis[nx][ny]&&ny<=n){
dis[nx][ny]=dis[x][y]+1;
vis[nx][ny]=true;
q.push(make_pair(nx,ny));
if(nx==ex&&ny==ey) return dis[nx][ny];
ny++;
}
nx=x;
ny=y-1;
while(!vis[nx][ny]&&ny>0){
dis[nx][ny]=dis[x][y]+1;
vis[nx][ny]=true;
q.push(make_pair(nx,ny));
if(nx==ex&&ny==ey) return dis[nx][ny];
ny--;
}
nx=x+1;
ny=y;
while(!vis[nx][ny]&&nx<=m){
dis[nx][ny]=dis[x][y]+1;
vis[nx][ny]=true;
q.push(make_pair(nx,ny));
if(nx==ex&&ny==ey) return dis[nx][ny];
nx++;
}
nx=x-1;
ny=y;
while(!vis[nx][ny]&&nx>0){
dis[nx][ny]=dis[x][y]+1;
vis[nx][ny]=true;
q.push(make_pair(nx,ny));
if(nx==ex&&ny==ey) return dis[nx][ny];
nx--;
}
}
}
int main(){
ll n,m;
cin>>n>>m;
bool flag=false;
for(ll i=1;i<=m;i++) for(ll j=1;j<=n;j++){
dis[i][j]=5e15;
vis[i][j]=false;
cin>>u[i][j];
if(u[i][j]=='C'&&!flag){
sx=i;
sy=j;
flag=true;
}
else if(u[i][j]=='C'){
ex=i;
ey=j;
}
else if(u[i][j]=='*') vis[i][j]=true;
}
cout<<m<<" happy\n";
ll ans=bfs();
cout<<ans;
return 0;
}
输入样例就会输出:
8 happy
0 bob
140721153326736
也就是说代码第 72 行函数未调用的时候 m 的之还是 8,但是第 8 行函数一调用 m 的值就编程了 0,这是为什么?