#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int maxn = 60; const int INF = 0x3f3f3f3f; const int MOD = 1e9 +7; int d[maxn]; char s[maxn][maxn]; int dis[maxn][maxn]; int n; void Dijkstra() { fill(d, d + n, INF); d[0] = 0; for(int i = 0; i < n; i++) { int minn = INF, u = -1; for(int j = 0; j < n; j++) { if(d[j] < minn) { minn = d[j]; u = j; } } if(u == -1) break; for(int j = 0; j < n; j++) { if(d[u] + dis[u][j] < d[j]) d[j] = d[u] + dis[u][j]; } } } int main() { while(cin >> n) { for(int i = 0; i < n; i++) { scanf("%s", s[i]); for(int j = 0; j < n; j++) dis[i][j] = s[i][j] - '0'; } Dijkstra(); ll ans = 1; ll cnt; for(int i = 1; i < n; i++) { cnt = 0; for(int j = 0; j < n; j++) { if(dis[j][i] && d[j] + dis[j][i] == d[i]) cnt++; } ans = ans * cnt % MOD; } cout << ans << endl; } return 0; }
hdu6026
猜你喜欢
转载自www.cnblogs.com/wushanni/p/10947628.html
今日推荐
周排行