百口莫辩克斯 2022-04-13 20:48 采纳率: 61.5%
浏览 44
已结题

关于把全局变量改成局部变量结果出现了问题

#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;
}
输出

img

但如果在i前面加个int,

img


就变成了

img


不过就是把一个i变成了局部变量,其他的也没变啊,为什么最终结果变了?

  • 写回答

1条回答 默认 最新

  • 乔千玫 2022-04-13 21:34
    关注

    你这加了int以后,这个局部变量i就只在循环里使用,循环结束就销毁,这个i和外面的全局变量i不是同一个

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错