代码:
#include<bits/stdc++.h>
using namespace std;
int graph[101][101];
int n,m;
int minn=0x3f3f3f3f;
int go[10001];
int dis[101];
int vis[101];
int ans=0;
int dij(int k,int end)
{
memset(vis,false,sizeof(vis));
vis[1]=1;
for(int i=1;i<n;i++)
{
int MINL=100000000;
int k=0;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<MINL)
{
MINL=dis[j];
k=j;
}
}
vis[k]=1;
for(int j=1;j<=n;j++)
{
if(dis[j]>dis[k]+graph[k][j])
{
dis[j]=dis[k]+graph[k][j];
}
}
}
return dis[end];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>go[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>graph[i][j];
}
}
for(int i=1;i<m;i++)
{
ans+=dij(go[i],go[i+1]);
}
cout<<ans<<endl;
return 0;
}
看注释