結果
| 問題 |
No.367 ナイトの転身
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-04-30 00:19:24 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,377 bytes |
| コンパイル時間 | 498 ms |
| コンパイル使用メモリ | 67,152 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-04 23:31:46 |
| 合計ジャッジ時間 | 1,295 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 9 WA * 18 |
ソースコード
#include <iostream>
#include <queue>
using namespace std;
#define INF -1
int h,w,nx,ny;
char a[500+10][500+10];
int d[500+10][500+10];
int sx,sy,gx,gy;
int kdx[8]={2,1,-1,-2,-2,-1,1,2},kdy[8]={1,2,2,1,-1,-2,-2,-1};
int bdx[4]={1,-1,-1,1},bdy[4]={1,1,-1,-1};
typedef pair<int,int> P;
bool flag=false;
void change()
{
if(flag)flag=false;
else flag=true;
}
int bfs()
{
queue<P> que;
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
d[j][i]=INF;
}
}
que.push(P(sx,sy));
d[sx][sy]=0;
while(que.size())
{
P p =que.front();que.pop();
if(p.first==gx&&p.second==gy)break;
if(a[p.first][p.second]=='R')change();
if(flag==false)
for(int i=0;i<8;i++)
{
int nx = p.first+kdx[i],ny=p.second+kdy[i];
if(0<=nx&&nx<w&&0<=ny&&ny<h&&d[nx][ny]==INF)
{
que.push(P(nx,ny));
d[nx][ny]=d[p.first][p.second]+1;
}
}
else
{
for(int i=0;i<4;i++)
{
int nx = p.first+bdx[i],ny=p.second+bdy[i];
if(0<=nx&&nx<w&&0<=ny&&ny<h&&d[nx][ny]==INF)
{
que.push(P(nx,ny));
d[nx][ny]=d[p.first][p.second]+1;
}
}
}
}
return d[gx][gy];
}
int main()
{
cin>>h>>w;
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
cin>>a[j][i];
if(a[j][i]=='S')
{
sx=j,sy=i;
}
if(a[j][i]=='G')
{
gx=j,gy=i;
}
}
}
int ans=bfs();
if(ans==INF)cout<<-1<<endl;
else cout<<ans<<endl;
}