#include<vector>
using namespace std;
struct coordinate{
int x;
int y;
int next;
int last;
coordinate() : y(0), x(0), next(0), last(0) {}
coordinate(int c1, int c2, int c3, int c4) : y(c1), x(c2), next(c3), last(c4) {}
};
typedef struct coordinate coordinate;
coordinate p, last, end_;
int solution(vector<vector<int> > maps)
{
vector<coordinate> list;
list.push_back({0,0,1,0});
p.x=0;
p.y=0;
p.next=0;
last.x=0;
last.y=0;
last.next=0;
end_.x=maps[0].size();
end_.y=maps.size();
int seed=0;
int ch;
int asdf=0;
if(!maps[0][0]) return -1;
maps[0][0]=0;
for(int i=2; i<10000; i++, seed=list[seed].next){
ch=list.size();
for(int j=seed; j<ch; j++){
if(list[j].y==end_.y-1 && list[j].x==end_.x-1) return i-1;
//if(list.size()==7) return ch;//maps[list[j].y][list[j].x]*100+list[j].x*10+list[j].y;
if(list[j].y+1 < end_.y && maps[list[j].y+1][list[j].x]==1){
list.push_back({list[j].y+1, list[j].x, 0, 0});
if(!list[seed].next) list[seed].next=(int)list.size()-1;
maps[list[j].y+1][list[j].x]=i;
}
if(list[j].y-1 >= 0 && maps[list[j].y-1][list[j].x]==1){
list.push_back({list[j].y-1, list[j].x, 0, 0});
if(!list[seed].next) list[seed].next=(int)list.size()-1;
maps[list[j].y-1][list[j].x]=i;
}
if(list[j].x+1 < end_.x && maps[list[j].y][list[j].x+1]==1){
list.push_back({list[j].y, list[j].x+1, 0, 0});
if(!list[seed].next) list[seed].next=(int)list.size()-1;
maps[list[j].y][list[j].x+1]=i;
}
if(list[j].x-1 >= 0 && maps[list[j].y][list[j].x-1]==1){
list.push_back({list[j].y, list[j].x-1, 0, 0});
if(!list[seed].next) list[seed].next=(int)list.size()-1;
maps[list[j].y][list[j].x-1]=i;
}
//if(j==5) return list.size();//maps[list[j].y][list[j].x]*100+list[j].x*10+list[j].y;
}
if(ch==list.size()) return -1;
}
return -1;
int a = 8;
//return list[a].next;
//return maps[list[a].y][list[a].x]*100+list[a].x*10+list[a].y;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: