memo ワーシャル=フロイド法
完全にメモです。
#include <cstdio> #include <algorithm> #include <iostream> using namespace std; int dp[8][8] = {0}; int V; const int INF = 10000; void wf(){ for(int k = 0;k < V;k++){ for(int i = 0;i < V;i++){ for(int j = 0;j < V;j++) dp[i][j] = min(dp[i][j],dp[i][k] + dp[k][j]); } } } int main(){ int dai = 0; scanf("%d%d",&V,&dai); for(int i = 0;i < V;i++){ for(int j = 0;j < V;j++){ if(i == j){ dp[i][j] = 0; }else{ dp[i][j] = INF; } } } for(int i = 0;i < dai;i++){ int s1,s2,s3; scanf("%d%d%d",&s1,&s2,&s3); dp[s1][s2] = s3; dp[s2][s1] = s3; } wf(); cout << dp[0][6] << endl; }