第8回日本情報オリンピック 予選(過去問)から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#D - 薄氷渡り
https://atcoder.jp/contests/joi2009yo/tasks/joi2009yo_d
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #D - 薄氷渡り https://atcoder.jp/contests/joi2009yo/tasks/joi2009yo_d 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; const int nn[4]={-1,0,1,0}; const int mm[4]={0,1,0,-1}; int n,m; vector<vector<int>> ice; int ans=0; void DFS(int n1,int m1,int cnt){ ice[n1][m1]=0; cnt++; ans=max(ans,cnt); for(int i=0;i<4;i++){ int n2=n1+nn[i]; int m2=m1+mm[i]; if((0<=n2 && n2<n) && (0<=m2 && m2<m)){ if(ice[n2][m2]==1){ DFS(n2,m2,cnt); } } } ice[n1][m1]=1; } int main(void){ cin>>n>>m; ice.resize(n); for(int i=0;i<n;i++){ ice[i].resize(m); } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>ice[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(ice[i][j]==1){ DFS(i,j,0); } } } cout<<ans<<endl; return 0; }