AtCoder Beginner Contest 079 D - Wall
Warshall Floyd 最短路。。。。先枚举 k
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int c[10][10]; 7 int H, W, A, ans; 8 9 int main() 10 { 11 scanf("%d%d", &H, &W); 12 for (int i = 0; i < 10; i++) 13 for (int j = 0; j < 10; j++) 14 scanf("%d", &c[i][j]); 15 for(int k=0;k<10;k++) 16 for(int i=0;i<10;i++) 17 for (int j = 0; j < 10; j++) { 18 if (c[i][j] > c[i][k] + c[k][j]) 19 c[i][j] = c[i][k] + c[k][j]; 20 } 21 ans = 0; 22 for(int i=0;i<H;i++) 23 for (int j = 0; j < W; j++) { 24 scanf("%d", &A); 25 if (A >= 0) 26 ans += c[A][1]; 27 } 28 printf("%d ", ans); 29 return 0; 30 }