百口莫辩克斯 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日

悬赏问题

  • ¥20 求友友们解惑,感激不尽
  • ¥15 python中aiohttp.client_exceptions.ContentTypeError
  • ¥30 DeepLung肺结节检测生成最大froc值对应的epoch报错
  • ¥15 信号发生器如何将频率调大,步尽值改成10
  • ¥15 keil 5 编程智能家具,风扇台灯开关,人体感应等
  • ¥100 找一名渗透方面的专家
  • ¥20 使用Matlab APP设计一个插补小程序
  • ¥15 evo评估时曲线出现问题
  • ¥15 eNSP拓扑图配置实验
  • ¥20 有没有兄弟会替换fmod studio的.bank文件内的音效?