C++
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct Q_info{
int x;
int y;
int d;
};
int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1};
int to_dxy[5]={-1,0,2,3,1};
int N,M;//n==x,m==y
int X,Y,D;
int rx,ry;
int map_[30][30];
int dt[30][30][4];
queue<Q_info> pq;
int is_safe(int x,int y){
return !(x<=0||y<=0||x>N||y>M);
}
int serch(int x,int y,int dir){
dt[y][x][dir] = 0;
pq.push({x, y, dir});
while(!pq.empty())
{
Q_info info = pq.front();
pq.pop();
if(info.x==rx&&info.y==ry){
return dt[info.y][info.x][info.d];
}
if(dt[info.y][info.x][(info.d+1)%4]==-1){
dt[info.y][info.x][(info.d+1)%4]=dt[info.y][info.x][info.d]+1;
pq.push({info.x,info.y,(info.d+1)%4});
}
if(dt[info.y][info.x][(info.d+3)%4]==-1){
dt[info.y][info.x][(info.d+3)%4]=dt[info.y][info.x][info.d]+1;
pq.push({info.x,info.y,(info.d+3)%4});
}
x=info.x;
y=info.y;
while(1){
x+=dx[info.d];
y+=dy[info.d];
if(is_safe(x,y)==0||map_[y][x]==1)
break;
if(dt[y][x][info.d]==-1){
dt[y][x][info.d]=dt[info.y][info.x][info.d]+1;
pq.push({x,y,info.d});
}
}
}
return -1;
}
int main()
{
scanf("%d %d",&M,&N);
for(int i=1;i<=M;i++){
for(int j=1;j<=N;j++){
scanf("%d",&map_[i][j]);
}
}
scanf("%d %d %d",&Y,&X,&D);
scanf("%d %d",&ry,&rx);
memset(dt,-1,sizeof(dt));
printf("%d",serch(X,Y,to_dxy[D]));
return 0;
}
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 안내사항 | 관리자 | 2019.12.02 | 175 |
201 | 4893 | 관리자 | 2019.12.20 | 145 |
200 | 4878 | 관리자 | 2019.12.20 | 145 |
199 | 4848 | 관리자 | 2019.12.20 | 148 |
198 | 4698 | 관리자 | 2019.12.20 | 144 |
197 | 4685 | 관리자 | 2019.12.20 | 202 |
196 | 4073 | 관리자 | 2020.04.06 | 156 |
195 | 4068 | 관리자 | 2020.04.06 | 213 |
» | 4065 | 관리자 | 2019.12.20 | 151 |
193 | 4064 | 관리자 | 2020.04.06 | 153 |
192 | 4059 | 관리자 | 2020.04.06 | 5937 |
191 | 4055 | 관리자 | 2020.04.06 | 152 |
190 | 4044 | 관리자 | 2020.04.06 | 157 |
189 | 4043 | 관리자 | 2020.04.06 | 151 |
188 | 4040 | 관리자 | 2020.04.06 | 150 |
187 | 4039 | 관리자 | 2019.12.20 | 153 |
186 | 4035 | 관리자 | 2020.04.06 | 155 |
185 | 4034 | 관리자 | 2020.04.06 | 147 |
184 | 4028 | 관리자 | 2020.04.06 | 165 |
183 | 4023 | 관리자 | 2019.12.20 | 174 |
182 | 3740 | 관리자 | 2019.12.20 | 212 |
181 | 3730 | 관리자 | 2019.12.20 | 176 |
180 | 3719 | 관리자 | 2019.12.20 | 154 |
179 | 3716 | 관리자 | 2019.12.20 | 143 |
178 | 3713 | 관리자 | 2019.12.20 | 164 |
177 | 3712 | 관리자 | 2019.12.20 | 161 |
176 | 3709 | 관리자 | 2019.12.20 | 147 |
175 | 3708 | 관리자 | 2019.12.20 | 114 |
174 | 3707 | 관리자 | 2019.12.20 | 109 |
173 | 3705 | 관리자 | 2019.12.20 | 112 |