Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Let's JUMPSTYLE"
https://onlinejudge.u-aizu.ac.jp/problems/2217
・ループするハードコアダンス
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #Volume22 : 2217 - Let's JUMPSTYLE
/* Aizu Online Judge in C++ #Volume22 : 2217 - Let's JUMPSTYLE https://onlinejudge.u-aizu.ac.jp/problems/2217 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll n,x[111][111],y[111][111],v[111][111],num; ll f(ll Y,ll X){ ll &a=v[Y][X]; if(a==-2){ return num++,-2; } if(a>=0){ return a; } a=-2; ll N=f(y[Y][X],x[Y][X]); a=(N==-2 ? num-1 : N); return N; } int main(void){ while(cin>>n,n){ for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ scanf("%d%d",x[i]+j,y[i]+j); v[i][j]=-1; } } num=0; for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(v[i][j]<0){ f(i,j); } } } cout<<num<<endl; } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/