SCAU 18714
18714 迷宫问题
时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0题型: 编程题 语言: 不限定 Description
迷宫是一个n*m的矩阵,玩家需要迷宫入口(坐标1,1)出发,寻找路径走到出口(n,m)。 请判断玩家能否从迷宫中走出。输入格式
第一行两个整数n和m,代表n行m列。(1<=n,m<=10) 下面n行每行m个字符,0代表可以通行,1代表不可以通行。输出格式
如果能从迷宫走出,输出yes,否则输出no。输入样例
8 8
00100010
00100010
00001100
01110000
00010000
01000100
01110110
00001000输出样例
yes提示
样例数据即为图片迷宫
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
char a[15][15];
bool v[15][15];//v访问
//偏移方向
int dx[4]={-1,1,0,0};//四个方向,左,右,上,下
int dy[4]={0,0,-1,1};
bool flag;
int main()
{//输入行列
int n,m,i,j,tx,ty;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
queue<int> x;
queue<int> y;
x.push(1);//起点入队
y.push(1);
while(!x.empty())
{
if( x.front()==n&&y.front()==m)//对手元素
{ flag=1;
break;
}
for(i=0;i<4;i++)//四个方向
{
tx=x.front()+dx[i];
ty=y.front()+dy[i];
if(tx>=1&&ty>=1&&tx<=n&&ty<=m&&a[tx][ty]!='1'&&v[tx][ty]==0)//空地
{ //入队
v[tx][ty]=1;
x.push(tx);
y.push(ty);
}
}
x.pop();//拓展完了需要将对首出队
y.pop();
}
if(flag==1)
cout<<"yes"<<'\n';
else
cout<<"no"<<'\n';
return 0;
}