結果

問題 No.367 ナイトの転身
ユーザー treeone
提出日時 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]

ソースコード

diff #
プレゼンテーションモードにする

#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 second
using 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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0