求debug,先给题目描述
描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 假设你已经得到了一个n*m的迷宫的图纸,请你判断是否可以走出迷宫。
输入INPUT:
输入格式
第一行是两个整数n和m(1<=n,m<=50),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
输入样例
3 3
S#T
.#.
. . .(小数点中间是不需要空格的,我为了过问问题的门槛才打了空格,要不然不让提交问题)
输出OUTPUT:
输出格式
如果能走出迷宫输出Yes,否则输出No。
输出样例
Yes
下面是我的代码求debug
#include <bits/stdc++.h>
using namespace std;
int m,n,ex,ey;
char a[1005][1005];
bool flag;
const int dx[]={-1,0,0,1},dy[]={0,-1,1,0};
void dsf(int x,int y){
if(x==ex&&y==ey){
flag=1;
return;
}
a[x][y]='#';
for(int i=0; i<4; i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]=='.')dsf(nx,ny);
if(flag)return;
}
}
int main(){
int sx,sy;
scanf("%d %d\n",&n,&m);
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
scanf("%c",&a[i][j]);
if(a[i][j]=='S'){
sx=i;
sy=j;
}else if(a[i][j]=='T'){
ex=i;
ey=j;
}
}
scanf("\n");
}
dsf(sx,sy);
printf(flag? "Yes":"No");
return 0;
}
给你个正确的参考一下
#include <bits/stdc++.h> //C++的万能头文件
using namespace std; //名空间
int n,m,p[10008],q[10008],ans[108][108],qx,qy,zx,zy; //不要钱的数组开大点
char a[108][108]; //用于存地图
int xx[5]= {0,1,-1,0,0}; //方向x
int yy[5]= {0,0,0,1,-1}; //方向y
void bfs() {
a[qx][qy]='#'; //设初始点为不可走
ans[qx][qy]=0; //初始点一步可以到
int head=1; //这个不用说
int tail=1; //这个也不用说
p[1]=qx; //把第一个位置的方向x加入队列
q[1]=qy; //把第一个位置的方向y加入队列
while(head<=tail) { //BFS扩展
for(int i=1; i<=4; i++) { //四个方向搜索
int h=p[head]+xx[i];
int l=q[head]+yy[i];
if(a[h][l]!='#'&&h>=1&&l>=1&&h<=n&&l<=m) {
a[h][l]='#'; //走过了,以防再走,所以设为不可走
//cout<<h<<" "<<l<<endl; //跟踪数据(检查时用)
//system("pause"); //跟踪数据(检查时用)
tail++; //有几个神奇的小朋友要进队列了
p[tail]=h; //神奇的小朋友1号,(方向x)
q[tail]=l; //神奇的小朋友2号,(方向y)
ans[h][l]=ans[p[head]][q[head]]+1; //把这个点的步数设为上一个点的步数+1
if(h==zx&&l==zy) { //判断是否到达终点
cout<<ans[h][l]<<endl; //输出结果
return ; //结束函数(易错点)
}
}
}
head++; //头结点++(易错点)
}
}
int main() {
cin>>n>>m; //输入长和宽
/*下面是输入*/
/*———————————————————*/
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin>>a[i][j];
if(a[i][j]=='S')
{
qx=i;
qy=j;
}
if(a[i][j]=='T')
{
zx=i;
zy=j;
}
}
}
/*———————————————————*/
/*上面是输入*/
bfs();
return 0;
}