有一个小小的疑惑
  • 板块学术版
  • 楼主pip202513
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/5/13 21:28
  • 上次更新2023/10/23 15:51:24
查看原帖
有一个小小的疑惑
399929
pip202513楼主2023/5/13 21:28

(其实是大大滴疑惑)

主要就是下文中(main函数中)的scanf中mz[i]+1表示什么,为什么可以这么打???求助

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <stack>
#include <map>
#include <set>
using namespace std;
const int maxw=305;

char mz[maxw][maxw];
int vis[maxw][maxw],dis[maxw][maxw],bw[maxw][maxw];
int step[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int si,sj;

int BFS(int m, int n)
{
	memset(vis,0,sizeof(vis));
	memset(bw,0,sizeof(bw));
	vis[si][sj]=1;
	dis[si][sj]=0;
	queue<pair<int,int> >Q;
	Q.push(make_pair(si,sj));
	int x,y,nx,ny;
	int v;
	while (!Q.empty()){
		x=Q.front().first;
		y=Q.front().second;
		Q.pop();
		v=dis[x][y]+1;
		if(bw[x][y]){
			dis[x][y]=v;
			bw[x][y]=0;
			Q.push(make_pair(x,y));
			continue;
		}
		for(int i=0;i<4;++i){
			nx=x+step[i][0];
			ny=y+step[i][1];
			if('T'==mz[nx][ny]){
				return v;
			}
			if(nx>0&&nx<=m&&ny>0&&ny<=n&&!vis[nx][ny]){
				if('E'==mz[nx][ny]){
					vis[nx][ny]=1;
					dis[nx][ny]=v;
					Q.push(make_pair(nx,ny));
				}
				else if('B'==mz[nx][ny]){
					bw[nx][ny]=1;
					vis[nx][ny]=1;
					dis[nx][ny]=v;
					Q.push(make_pair(nx,ny));
				}
			}
		}
	}
	return -1;
}

int main()
{
	int m,n;
	while(~scanf("%d %d",&m,&n)&&m){
		for (int i=1;i<=m;++i){
	scanf("%s",mz[i]+1); 这里啊!!!
			for (int j=1;j<=n;++j){
				if ('Y'==mz[i][j]){
					si=i;
					sj=j;
				}
			}
		}
		printf("%d\n", BFS(m,n));
	}
	return 0;
}

题目应该是poj2312

2023/5/13 21:28
加载中...