个人代码交上去运行错误我崩溃
题目:
密室逃脱 题目描述 有间房间是M行N列的网格,每个网格上有一个正整数。行编号为1,2,...,M,列编号为1,2,...,N。我们用(r,c)表示位于r行c列的格子。
你从左上角(1,1)开始,从右下角(M,N)离开。如果你位于值为x的格子,下一步你可以跳至格子(a,b),其满足a * b = x。比如你位于值为6的格子,你可以跳至位置(1,6),(2,3),(3,2),(6,1)。但注意如果房间只有5行6列,是没有格子(6,1)的。
输入格式 第一行输入整数 M (1 <= M <=1000). 第二行输入整数 N (1<=N<=1000). 接下来M行N列为房间里M * N个格子的值,大于等于1,小于等于10^6。
15个测试样例中有4个,M<=200 and N <=200。
输出格式 如果能离开房间输出“yes”,否则输出“no”
样例 样例输入 3 4 3 10 8 14 1 11 12 12 6 2 3 9 样例输出 yes 提示 从 (1,1)开始,值为3,可以跳至 (3,1).
(3,1)值为6 ,可跳至 (2,3).
(2,3)值为12,可跳至(3,4),成功逃离。
我的代码
#include<bits/stdc++.h>
using namespace std;
struct osos{
int sum;
int ying[103];
}f[1000003];
int m,n,a[1003][1003],vis[1003][1003],cnt=0,ans[1003][1003];
queue<int>s;queue<int>s2;
void bfs(int x,int y){
s.push(x);s2.push(y);
while(!s.empty()){
for(int i=1;i<=f[a[s.front()][s2.front()]].sum;i++){
int nx=f[a[s.front()][s2.front()]].ying[i];
int ny=a[s.front()][s2.front()]/nx;
if(!vis[nx][ny] && nx>=1 &&nx<=m &&ny>=1 &&ny<=n){
s.push(nx);s2.push(ny);vis[nx][ny]=1;
}
}
s.pop();s2.pop();
}
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++){
for(int k=1;k<=a[i][j];k++){
if(a[i][j]%k==0){
f[a[i][j]].sum++;
f[a[i][j]].ying[f[a[i][j]].sum]=k;
}
}
}
bfs(1,1);
if(vis[m][n]) cout<<"yes";
else cout<<"no";
return 0;
}