百口莫辩克斯 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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。