結果
問題 | No.367 ナイトの転身 |
ユーザー |
![]() |
提出日時 | 2016-04-29 23:41:34 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 30 ms / 2,000 ms |
コード長 | 1,750 bytes |
コンパイル時間 | 1,228 ms |
コンパイル使用メモリ | 163,748 KB |
実行使用メモリ | 7,816 KB |
最終ジャッジ日時 | 2024-10-04 19:23:49 |
合計ジャッジ時間 | 2,048 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 27 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:50:21: warning: ‘sy’ may be used uninitialized in this function [-Wmaybe-uninitialized] 50 | d[sy][sx][1]=0; | ~~~~~~~~~~~~^~ main.cpp:50:21: warning: ‘sx’ may be used uninitialized in this function [-Wmaybe-uninitialized]
ソースコード
#include <bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<n;i++)#define repb(i,a,b) for(int i=a;i>=b;i--)#define all(a) a.begin(),a.end()#define o(a) cout<<a<<endl#define int long long#define fi first#define se secondusing namespace std;typedef vector<int> vi;typedef vector<vi> vvi;typedef pair<int,int> pii;const int INF=1e7;int kdy[8]={2,2,1,1,-1,-1,-2,-2};int kdx[8]={-1,1,-2,2,-2,2,-1,1};int bdy[4]={1,1,-1,-1};int bdx[4]={-1,1,-1,1};struct data{int y,x;bool k;data(int y, int x,int k):y(y),x(x),k(k){}};char c[510][510]={};int d[510][510][2];signed main(){int h,w;cin>>h>>w;int sy,sx,gy,gx;rep(i,0,h){rep(j,0,w){cin>>c[i][j];if(c[i][j]=='S'){sy=i;sx=j;}else if(c[i][j]=='G'){gy=i;gx=j;}}}int f=1;rep(i,0,h) rep(j,0,w) rep(k,0,2) d[i][j][k]=INF;queue<data> q;q.push(data(sy,sx,f));d[sy][sx][1]=0;while(q.size()){data p=q.front(); q.pop();if(p.y==gy && p.x==gx) break;if(p.k){rep(i,0,8){int ny=p.y+kdy[i];int nx=p.x+kdx[i];if(0<=ny && ny<h && 0<=nx && nx<w){int tmp=1;if(c[ny][nx]=='R') tmp=0;if(d[ny][nx][tmp]!=INF) continue;q.push(data(ny,nx,tmp));d[ny][nx][tmp]=d[p.y][p.x][1]+1;//cout<<p.k<<" "<<ny<<" "<<nx<<" "<<d[ny][nx]<<endl;}}}else{rep(i,0,4){int ny=p.y+bdy[i];int nx=p.x+bdx[i];if(0<=ny && ny<h && 0<=nx && nx<w){int tmp=0;if(c[ny][nx]=='R') tmp=1;if(d[ny][nx][tmp]!=INF) continue;else q.push(data(ny,nx,tmp));d[ny][nx][tmp]=d[p.y][p.x][0]+1;//cout<<p.k<<" "<<ny<<" "<<nx<<" "<<d[ny][nx]<<endl;}}}}int ans=min(d[gy][gx][0],d[gy][gx][1]);if(ans==INF) cout<<-1<<endl;else cout<<ans<<endl;}