結果
| 問題 |
No.13 囲みたい!
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-10-05 10:32:58 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,428 bytes |
| コンパイル時間 | 526 ms |
| コンパイル使用メモリ | 65,780 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-12 12:31:03 |
| 合計ジャッジ時間 | 1,638 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 WA * 1 |
ソースコード
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
#include <utility>
using namespace std;
typedef long long ll;
ll MOD = 1e9+7;
int m[100][100];
int w,h;
int dfs(int n,int x,int y,int sx,int sy,bool check[][100],int cnt)
{
check[y][x]=true;
if(cnt>1)
check[sy][sx]=false;
if(x<w-1 && m[y][x+1]==n && !check[y][x+1])
{
if(x+1==sx && y==sy)
return 1;
else
return dfs(n,x+1,y,sx,sy,check,cnt+1);
}
if(x>0 && m[y][x-1]==n && !check[y][x-1])
{
if(x-1==sx && y==sy)
return 1;
else
return dfs(n,x-1,y,sx,sy,check,cnt+1);
}
if(y<h-1 && m[y+1][x]==n && !check[y+1][x])
{
if(x==sx && y+1==sy)
return 1;
else
return dfs(n,x,y+1,sx,sy,check,cnt+1);
}
if(y<h+1 && m[y-1][x]==n && !check[y-1][x])
{
if(x==sx && y-1==sy)
return 1;
else
return dfs(n,x,y-1,sx,sy,check,cnt+1);
}
return 0;
}
int main()
{
int ans=0;
cin>>w>>h;
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
cin>>m[i][j];
}
//それぞれの数字について探索する
for(int n=1;n<1001;n++)
{
bool check[100][100];
//fill(check[0],check[100],false);
//始点を探索する
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
if(m[i][j]==n)
{
fill(check[0],check[100],false);
ans+=dfs(n,j,i,j,i,check,0);
}
if(ans>0)
{
cout<<"possible"<<endl;
return 0;
}
}
}
}
cout<<"impossible"<<endl;
return 0;
}