(其实是大大滴疑惑)
主要就是下文中(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