結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
ikd
|
| 提出日時 | 2016-08-04 13:20:00 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,459 bytes |
| コンパイル時間 | 582 ms |
| コンパイル使用メモリ | 60,768 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-06 23:49:56 |
| 合計ジャッジ時間 | 1,502 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
#include<iostream>
#include<math.h>
using namespace std;
typedef pair<int, int> pii;
int W, H, ans=999;
char fld[20][20];
int tag[20][20];
bool is_fld(int h, int w){
return (0<=h&&h<H&&0<=w&&w<W);
}
void dfs(int h, int w, int id){
if(!is_fld(h, w)) return;
if(fld[h][w]=='#') return;
if(tag[h][w]!=-1) return;
tag[h][w]=id;
const pii dd[]={{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
for(auto d: dd){
dfs(h+d.first, w+d.second, id);
}
return;
}
int dist(int a, int b, int c, int d){
return (abs(a-c)+abs(b-d)-1);
}
void solve(){
int id=1;
for(int i=0; i<H; i++){
for(int j=0; j<W; j++){
if(fld[i][j]=='#') continue;
if(tag[i][j]!=-1) continue;
dfs(i, j, id);
id++;
}
}
for(int i1=0; i1<H; i1++){
for(int j1=0; j1<W; j1++){
if(fld[i1][j1]=='#') continue;
for(int i2=0; i2<H; i2++){
for(int j2=0; j2<W; j2++){
if(fld[i2][j2]=='#') continue;
if((tag[i1][j1]==1)&&(tag[i2][j2]==2)){
ans=min(ans, dist(i1, j1, i2, j2));
}
}
}
}
}
return;
}
int main(){
cin>> W>> H;
for(int i=0; i<H; i++){
for(int j=0; j<W; j++){
cin>> fld[i][j];
}
}
fill(tag[0], tag[20], -1);
solve();
cout<< ans<< endl;
return 0;
}
ikd