Submission #00022


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <bits/stdc++.h>
using namespace std;
int n,m;
int flag=0;
int maps[111][111];
int d[111][111];
int h,w;
int ans=0;
void dfs(int x,int y);
int main(){
int sx,sy,gx,gy;
int a,b;
int x1,y1,x2,y2;
cin >> h >> w;//盤面の大きさ
for(int i=0;i<h;i++){//盤面の情報 0:なし,1:氷塊,4~:ワープ地点
for(int j=0;j<w;j++){
maps[i][j]=0;
d[i][j]=0;
}
}
cin >> sx >> sy >> gx >> gy;//スタート地点、ゴール地点の座標
maps[sy][sx]=0;//スタート地点
maps[gy][gx]=3;//ゴール地点
cin >> m;//氷塊の数
for(int i=0;i<m;i++){
cin >> a >> b;
maps[b][a]=1;//氷塊の座標
}
cin >> n;//ループの場所
for(int i=0;i<n;i++){//ループごとに
cin >> x1 >> y1 >> x2 >> y2;
maps[y1][x1]=maps[y2][x2]=i+4;//ペアのような入り口と出口をつくる
}
dfs(sx,sy);
if(ans)cout << "OK" << endl;
else cout << "NO" << endl;
}
void dfs(int x,int y){//今いる場所
d[y][x]=1;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int nx,ny;
if(ans==1)return;
for(int i=0;i<4;i++){
nx=x+dx[i];
ny=y+dy[i];
if(maps[ny][nx]==1)continue;//すぐ隣がブロックだったらみる必要がない
while(maps[ny][nx]!=1 && nx>=0 && nx<w && ny>=0 && ny<h){
if(maps[ny][nx]==0){//範囲外とうに行くまで滑り続ける
nx+=dx[i];
ny+=dy[i];
}
else if(maps[ny][nx]==3){//ゴールだったら
ans=1;
return;
}else if(maps[ny][nx]>=4){//ワープ地点だったら
int tmp=maps[ny][nx];//ペアのワープ地点を探すため
maps[ny][nx]=1;
for(int k=0;k<h;k++){
for(int j=0;j<w;j++){
if(maps[k][j]==tmp && (k!=ny || j!=nx)){//ワープ地点を見つけたら
dfs(j,k);
maps[ny][nx]=0;
}
}
}
}
}
if(maps[ny][nx]==1 && nx>=0 && nx<w && ny>=0 && ny<h){//ブロック地点にきたら
if(d[ny-dy[i]][nx-dx[i]]==1)return;//一度再帰呼び出しをした場所はみる意味がない
dfs(nx-dx[i],ny-dy[i]);
}
}
}

ステータス

項目 データ
問題 0003 - 滑った故の結末
ユーザー名 ei1435
投稿日時 2015-09-16 17:25:53
言語 C++11
状態 Accepted
得点 100
ソースコード長 2115 Byte
最大実行時間 23 ms
最大メモリ使用量 724 KB

セット

セット 得点 Cases
1 ALL 100 / 100 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
dfs-b_in1.txt AC 18 ms 476 KB
1
dfs-b_in2.txt AC 23 ms 524 KB
1
dfs-b_in3.txt AC 16 ms 624 KB
1
dfs-b_in4.txt AC 15 ms 724 KB
1
dfs-b_in5.txt AC 15 ms 568 KB
1
dfs-b_in6.txt AC 15 ms 668 KB
1
dfs-b_in7.txt AC 18 ms 640 KB
1
dfs-b_in8.txt AC 23 ms 616 KB
1
dfs-b_in9.txt AC 19 ms 584 KB
1
dfs-b_in10.txt AC 19 ms 704 KB
1
dfs-b_in11.txt AC 21 ms 676 KB
1