#include<bits/stdc++.h> using namespace std; int dp[33][51];//記錄從起點到此點之距離的方法數 char mp[33][33]; int main(int argc, char** argv) { int n,f,t,d; while(cin>>n){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>mp[i][j]; memset(dp,0,sizeof(dp)); cin>>f>>t>>d; f--;t--; dp[f][0]=1;//從自己開始距離為零方法一種 for(int k=1;k<=d;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(mp[j][i]-'0') dp[i][k]+=dp[j][k-1];//如果J可連到I就加上去走到I的方法數 int ans=0; for(int i=0;i<=d;i++) ans+=dp[t][i]; cout<<ans<<'\n'; } return 0; }
給解釋,不要給 AC code 啦