#include<bits/stdc++.h>
using namespace std;
int a[1005][1005],d[1005],i,j;
const int INF=1e9;
void chushi(int n)//邻接矩阵初始化
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i!=j)
a[i][j]=INF;//求最短要初始化为无限大
}
}
}
void dij(int n)//单源最短路径
{
bool f[1005]={0};
f[1]=1;
int v;
for(i=1;i<n;i++)
{
int min=INF;
for(j=1;j<=n;j++)
{
if(!f[j]&&min>d[j])//找未标记中最小的
{
min=d[j];
v=j;
}
}
f[v]=1;//标记
for(j=1;j<=n;j++)
{
if(!f[j]&&a[v][j]+d[v]<d[j])//更新路径长度
{
d[j]=a[v][j]+d[v];
}
}
}
}
void over(int n)//翻转
{
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
int t=0;
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
}
int main()
{
int n,m,x,y,z;
cin>>n>>m;
chushi(n);
for(i=1;i<=m;i++)
{
cin>>x>>y>>z;
a[x][y]=min(a[x][y],z);//避坑:防止同一条路多次输入!
}
for(i=1;i<=n;i++)
{
d[i]=a[1][i];//路径长度初始化
}
dij(n);
int ans;
for(i=1;i<=n;i++)
{
ans+=d[i];
}
over(n);//翻转
for(i=1;i<=n;i++)//路径长度初始化
{
d[i]=a[1][i];
}
dij(n);
for(i=1;i<=n;i++)
{
ans+=d[i];//求和
}
cout<<ans<<endl;//华丽地输出
return 0;
}
输出
但如果在i前面加个int,
就变成了
不过就是把一个i变成了局部变量,其他的也没变啊,为什么最终结果变了?