题目连接:https://www.luogu.com.cn/problem/P1359
这个题需要注意图是***有向图***,不是无向图
以下是AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=300;
int n,t,now,g[N][N],dis[N],minn;
bool vis[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)//建图,注意是有向图
{
for(int j=1;j<=n;j++)
{
if(i==j) g[i][j]=0;
else g[i][j]=9999999;
}
}
for(int i=1;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
scanf("%d",&t);
g[i][j]=t;
}
}//最短路Dijkstra
dis[1]=0;
for(int i=2;i<=n;i++)
dis[i]=g[1][i];
for(int i=1;i<=n;i++)
{
minn=9999999;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<minn)
{
minn=dis[j];
now=j;
}
}
vis[now]=1;
for(int c=1;c<=n;c++)
{
dis[c]=min(dis[now]+g[now][c],dis[c]);
}
}
printf("%d",dis[n]);
return 0;
}