求助一个奇怪的问题
查看原帖
求助一个奇怪的问题
660641
0zhouyq楼主2023/2/5 19:58

这是我的代码。

#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

也就是说代码第 7272 行函数未调用的时候 mm 的之还是 88,但是第 88 行函数一调用 mm 的值就编程了 00,这是为什么?

2023/2/5 19:58
加载中...